init
This commit is contained in:
commit
ef14ffb1f1
|
@ -0,0 +1,4 @@
|
|||
node_modules
|
||||
bundle.zip
|
||||
dist
|
||||
public
|
|
@ -0,0 +1,30 @@
|
|||
import { StorybookConfig } from "@storybook/react-vite";
|
||||
import { mergeConfig } from "vite";
|
||||
|
||||
export default {
|
||||
stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
|
||||
addons: [
|
||||
"@storybook/addon-links",
|
||||
"@storybook/addon-essentials",
|
||||
"@storybook/addon-onboarding",
|
||||
"@storybook/addon-interactions",
|
||||
"@storybook/addon-backgrounds",
|
||||
],
|
||||
core: {
|
||||
builder: "@storybook/builder-vite",
|
||||
},
|
||||
async viteFinal(config) {
|
||||
return mergeConfig(config, {
|
||||
optimizeDeps: {
|
||||
include: ["storybook-dark-mode"],
|
||||
},
|
||||
});
|
||||
},
|
||||
framework: {
|
||||
name: "@storybook/react-vite",
|
||||
options: {},
|
||||
},
|
||||
docs: {
|
||||
autodocs: "tag",
|
||||
},
|
||||
} as StorybookConfig;
|
|
@ -0,0 +1,7 @@
|
|||
<style>
|
||||
html,
|
||||
body,
|
||||
#storybook-root {
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,22 @@
|
|||
// import "../src/App/App.scss";
|
||||
import { Parameters } from "@storybook/addons";
|
||||
|
||||
export const parameters: Parameters = {
|
||||
actions: { argTypesRegex: "^on[A-Z].*" },
|
||||
options: {},
|
||||
controls: {
|
||||
matchers: {
|
||||
color: /(background|color)$/i,
|
||||
date: /Date$/,
|
||||
},
|
||||
},
|
||||
backgrounds: {
|
||||
default: "dark",
|
||||
values: [
|
||||
{
|
||||
name: "dark",
|
||||
value: "#404040",
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
|
@ -0,0 +1,19 @@
|
|||
# Webflow Designer Extension
|
||||
|
||||
Display views and visitors for the current page.
|
||||
|
||||

|
||||
|
||||
## Developing
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## Deploying
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
Upload `bundle.zip`
|
|
@ -0,0 +1,14 @@
|
|||
overwrite: true
|
||||
schema: "http://localhost:8000/api/graphql"
|
||||
documents: "**/src/**/*.graphql"
|
||||
generates:
|
||||
src/generated/graphql.ts:
|
||||
plugins:
|
||||
- "typescript"
|
||||
- "typescript-operations"
|
||||
- typescript-react-apollo
|
||||
config:
|
||||
maybeValue: T | null | undefined
|
||||
src/generated/apolloHelpers.ts:
|
||||
plugins:
|
||||
- typescript-apollo-client-helpers
|
|
@ -0,0 +1,12 @@
|
|||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter" />
|
||||
|
||||
<style>
|
||||
body {
|
||||
font-family: "Inter", sans-serif;
|
||||
font-size: 12px;
|
||||
background-color: #2b2b2b;
|
||||
}
|
||||
</style>
|
||||
<div id="root"></div>
|
||||
<!-- <script src="https://d3e54v103j8qbb.cloudfront.net/gen/js/entrypoint-designer-extensions-client.e4ef1682e412a922c7e4.js"></script> -->
|
||||
<script type="module" src="src/main.tsx"></script>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"name": "nocodelytics-webflow-designer-extension",
|
||||
"version": "1.0.0",
|
||||
"description": "This is an example Webflow Designer extension written in TypeScript to get you started. Check out our [documentation](https://docs.developers.webflow.com/v2.0.0/docs/create-a-designer-extensions) for in-depth information about Designer Extension features and API.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"storybook": "storybook dev -p 6006",
|
||||
"build-storybook": "storybook build",
|
||||
"dev": "vite",
|
||||
"build": "vite build && webflow extension bundle",
|
||||
"codegen": "graphql-codegen --config codegen.yml"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@apollo/client": "^3.7.17",
|
||||
"@graphql-codegen/cli": "^5.0.0",
|
||||
"@graphql-codegen/typescript-apollo-client-helpers": "^2.2.6",
|
||||
"@graphql-codegen/typescript-operations": "^4.0.1",
|
||||
"@graphql-codegen/typescript-react-apollo": "^3.3.7",
|
||||
"@storybook/builder-vite": "^7.1.0",
|
||||
"@vitejs/plugin-react-refresh": "^1.3.6",
|
||||
"@webflow/designer-extension-typings": "^0.1.3",
|
||||
"chart.js": "^4.3.0",
|
||||
"chartjs-adapter-date-fns": "^3.0.0",
|
||||
"dotenv": "^16.3.1",
|
||||
"react": "^18.2.0",
|
||||
"react-chartjs-2": "^5.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-router-dom": "^6.14.2",
|
||||
"vite": "^4.4.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@storybook/addon-actions": "^7.1.0",
|
||||
"@storybook/addon-backgrounds": "^7.1.0",
|
||||
"@storybook/addon-essentials": "^7.1.0",
|
||||
"@storybook/addon-interactions": "^7.1.0",
|
||||
"@storybook/addon-links": "^7.1.0",
|
||||
"@storybook/addon-onboarding": "^1.0.7",
|
||||
"@storybook/blocks": "^7.1.0",
|
||||
"@storybook/react": "^7.1.0",
|
||||
"@storybook/react-vite": "^7.1.0",
|
||||
"@storybook/testing-library": "^0.2.0",
|
||||
"@storybook/types": "^7.1.0",
|
||||
"@types/node": "^20.4.2",
|
||||
"@types/react-dom": "^18.2.7",
|
||||
"prop-types": "^15.8.1",
|
||||
"storybook": "^7.1.0",
|
||||
"storybook-builder-vite": "^0.1.23"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
import { ApolloProvider } from "@apollo/client";
|
||||
import React from "react";
|
||||
import { apolloClient } from "./apolloClient";
|
||||
import { AuthIFrame } from "./components/AuthIFrame";
|
||||
import { MetricDetailsPage } from "./pages";
|
||||
|
||||
export const App: React.FC = () => {
|
||||
return (
|
||||
<ApolloProvider client={apolloClient}>
|
||||
<AuthIFrame />
|
||||
<MetricDetailsPage />
|
||||
</ApolloProvider>
|
||||
);
|
||||
};
|
|
@ -0,0 +1,43 @@
|
|||
import {
|
||||
ApolloClient,
|
||||
InMemoryCache,
|
||||
ServerParseError,
|
||||
split,
|
||||
} from "@apollo/client";
|
||||
import { BatchHttpLink as HttpLink } from "@apollo/client/link/batch-http";
|
||||
import { setContext } from "@apollo/client/link/context";
|
||||
import { onError } from "@apollo/client/link/error";
|
||||
import { getMainDefinition } from "@apollo/client/utilities";
|
||||
|
||||
import { config } from "./config";
|
||||
|
||||
const errorLink = onError(({ networkError }) => {
|
||||
if (networkError) {
|
||||
const { statusCode } = networkError as ServerParseError;
|
||||
if (statusCode === 401) {
|
||||
localStorage.removeItem(config.localstorageKeys.token);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const authLink = setContext((_, { headers }) => {
|
||||
const token = localStorage.getItem(config.localstorageKeys.token);
|
||||
console.log(token);
|
||||
return {
|
||||
headers: {
|
||||
...headers,
|
||||
authorization: token ? `Bearer ${token}` : "",
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
const httpLink = new HttpLink({
|
||||
uri: `${config.api.url}/graphql`,
|
||||
});
|
||||
|
||||
export const apolloClient = new ApolloClient({
|
||||
uri: `${config.api.url}/graphql`,
|
||||
link: authLink.concat(errorLink).concat(httpLink),
|
||||
// connectToDevTools: true,
|
||||
cache: new InMemoryCache(),
|
||||
});
|
|
@ -0,0 +1,45 @@
|
|||
import React, { useEffect, useState } from "react";
|
||||
import { config } from "../config";
|
||||
|
||||
/**
|
||||
* This is based on Rodney Urquhart's example https://github.com/RodneyU215
|
||||
* https://github.com/Webflow-Examples/Apps-v2-Hybrid-Auth-Demo/tree/main#key-components
|
||||
* https://www.loom.com/share/28afbb72a30e42ca9333a77e65fbd025
|
||||
*
|
||||
* tl;dr app.nocodelytics.com/webflow_auth.html will post the token with
|
||||
* `window.parent.postMessage(token, extensionURL)`
|
||||
*
|
||||
* This component listens to that event and save the token in local storage
|
||||
*/
|
||||
export const AuthIFrame: React.FC = () => {
|
||||
const [url, setUrl] = useState<string>();
|
||||
const [done, setDone] = useState<boolean>(false);
|
||||
|
||||
const handleMessage = (event: MessageEvent) => {
|
||||
if (event.origin.startsWith(config.baseUrl)) {
|
||||
localStorage.setItem(config.localstorageKeys.token, event.data);
|
||||
console.info(
|
||||
`new token received from ${config.authIFrameUrl}`,
|
||||
event.data
|
||||
);
|
||||
window.removeEventListener("message", handleMessage);
|
||||
setUrl("");
|
||||
setDone(true);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
window.addEventListener("message", handleMessage);
|
||||
setUrl(`${config.authIFrameUrl}`);
|
||||
return () => {
|
||||
window.removeEventListener("message", handleMessage);
|
||||
};
|
||||
}, []);
|
||||
|
||||
if (done) {
|
||||
return null;
|
||||
}
|
||||
return url ? <iframe style={{}} src={url} /> : null;
|
||||
};
|
|
@ -0,0 +1,14 @@
|
|||
import { Button } from "./Button";
|
||||
|
||||
// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
|
||||
export default {
|
||||
title: "Example/Button",
|
||||
component: Button,
|
||||
};
|
||||
|
||||
// More on writing stories with args: https://storybook.js.org/docs/react/writing-stories/args
|
||||
export const Primary = {
|
||||
args: {
|
||||
children: "Click me",
|
||||
},
|
||||
};
|
|
@ -0,0 +1,20 @@
|
|||
import React from "react";
|
||||
|
||||
interface ButtonProps {}
|
||||
|
||||
export const Button: React.FC<React.PropsWithChildren<ButtonProps>> = (
|
||||
props
|
||||
) => (
|
||||
<button
|
||||
style={{
|
||||
backgroundColor: "#1280EE",
|
||||
color: "white",
|
||||
borderColor: "#363636",
|
||||
border: 1,
|
||||
padding: "4px 16px",
|
||||
fontSize: 11,
|
||||
}}
|
||||
>
|
||||
{props.children}
|
||||
</button>
|
||||
);
|
|
@ -0,0 +1 @@
|
|||
export * from "./Button";
|
|
@ -0,0 +1,16 @@
|
|||
import { LineChart, LineChartProps } from "./LineChart";
|
||||
|
||||
export default {
|
||||
title: "LineChart",
|
||||
component: LineChart,
|
||||
};
|
||||
|
||||
export const Primary = {
|
||||
args: {
|
||||
title: "Views",
|
||||
data: {
|
||||
labels: ["Jan", "Feb"],
|
||||
values: [1, 2],
|
||||
},
|
||||
} as LineChartProps,
|
||||
};
|
|
@ -0,0 +1,104 @@
|
|||
import React from "react";
|
||||
import {
|
||||
Chart as ChartJS,
|
||||
CategoryScale,
|
||||
LinearScale,
|
||||
PointElement,
|
||||
LineElement,
|
||||
Title,
|
||||
Tooltip,
|
||||
TimeScale,
|
||||
} from "chart.js";
|
||||
import { Line } from "react-chartjs-2";
|
||||
import "chartjs-adapter-date-fns";
|
||||
|
||||
ChartJS.register(
|
||||
CategoryScale,
|
||||
LinearScale,
|
||||
PointElement,
|
||||
LineElement,
|
||||
Title,
|
||||
Tooltip,
|
||||
TimeScale
|
||||
);
|
||||
|
||||
ChartJS.defaults.color = "#D9D9D9";
|
||||
|
||||
export interface LineChartProps {
|
||||
title: string;
|
||||
data: {
|
||||
labels: string[];
|
||||
values: number[];
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* This component is a temporary
|
||||
* We should be using @nocodelytics/components instead but it's not ready yet
|
||||
* This works for the first version
|
||||
*/
|
||||
export const LineChart: React.FC<LineChartProps> = (props) => {
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
position: "relative",
|
||||
height: "100%",
|
||||
backgroundColor: "#404040",
|
||||
padding: "10px",
|
||||
border: "1px solid #212121",
|
||||
}}
|
||||
>
|
||||
<Line
|
||||
style={{ height: "100%", width: "100%" }}
|
||||
options={{
|
||||
responsive: true,
|
||||
maintainAspectRatio: false,
|
||||
interaction: { mode: "nearest", intersect: false },
|
||||
scales: {
|
||||
y: { ticks: { stepSize: 1 } },
|
||||
x: {
|
||||
type: "time",
|
||||
},
|
||||
},
|
||||
plugins: {
|
||||
title: {
|
||||
display: Boolean(props.title),
|
||||
text: props.title,
|
||||
},
|
||||
tooltip: {
|
||||
animation: false,
|
||||
backgroundColor: "#2b2b2b",
|
||||
bodyColor: "white",
|
||||
displayColors: false,
|
||||
mode: "nearest",
|
||||
caretSize: 0,
|
||||
borderWidth: 1,
|
||||
borderColor: "#212121",
|
||||
cornerRadius: 0,
|
||||
xAlign: "center",
|
||||
yAlign: "center",
|
||||
callbacks: {
|
||||
title: () => "",
|
||||
label: (item) => {
|
||||
const date = new Date(item.parsed.x).toLocaleDateString();
|
||||
return `${date}: ${item.parsed.y}`;
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}}
|
||||
data={{
|
||||
labels: props.data.labels,
|
||||
datasets: [
|
||||
{
|
||||
pointStyle: "line",
|
||||
data: props.data.values,
|
||||
borderColor: "#0073E6",
|
||||
backgroundColor: "#0073E6",
|
||||
},
|
||||
],
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
|
@ -0,0 +1 @@
|
|||
export * from "./LineChart";
|
|
@ -0,0 +1,24 @@
|
|||
import { Dropdown, DropdownProps } from "./Dropdown";
|
||||
|
||||
export default {
|
||||
title: "Dropdown",
|
||||
component: Dropdown,
|
||||
};
|
||||
|
||||
export const Primary = {
|
||||
args: {
|
||||
options: [
|
||||
{ label: "last 30 days", value: "30" },
|
||||
{ label: "last 7 days", value: "7" },
|
||||
],
|
||||
} as DropdownProps,
|
||||
};
|
||||
export const Open = {
|
||||
args: {
|
||||
options: [
|
||||
{ label: "last 30 days", value: "30" },
|
||||
{ label: "last 7 days", value: "7" },
|
||||
],
|
||||
open: true,
|
||||
} as DropdownProps,
|
||||
};
|
|
@ -0,0 +1,97 @@
|
|||
import React, { useEffect, useRef, useState } from "react";
|
||||
import { theme } from "../../theme";
|
||||
|
||||
export interface DropdownProps {
|
||||
onChange: (value: string) => void;
|
||||
options: Array<{ label: string; value: string }>;
|
||||
selected?: string;
|
||||
open?: boolean;
|
||||
}
|
||||
|
||||
const DropdownOptions: React.FC<DropdownProps> = (props) => {
|
||||
return (
|
||||
<div style={{}}>
|
||||
{props.options.map(({ label, value }) => (
|
||||
<div
|
||||
style={{ display: "flex", padding: "4px 8px", cursor: "pointer" }}
|
||||
onClick={() => {
|
||||
props.onChange(value);
|
||||
}}
|
||||
>
|
||||
<div style={{ marginRight: 10, width: 10 }}>
|
||||
{props.selected === value ? "X" : ""}
|
||||
</div>
|
||||
<div>{label}</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Temp comp until @nocodelytics/components is ready
|
||||
* We'll use <Timeframe /> which will also include types
|
||||
*/
|
||||
export const Dropdown: React.FC<DropdownProps> = (props) => {
|
||||
if (!props.options.length) {
|
||||
throw new Error(`Dropdown requires options`);
|
||||
}
|
||||
const [isOpen, setIsOpen] = useState<boolean>(props.open || false);
|
||||
const [selected, setSelected] = useState<string>(
|
||||
props.selected || props.options[0].value
|
||||
);
|
||||
const ref = useRef<HTMLDivElement>(null);
|
||||
|
||||
useEffect(() => {
|
||||
function handleClickOutside(event: Event) {
|
||||
if (ref.current && !ref.current.contains(event.target as Node)) {
|
||||
setIsOpen(false);
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener("mousedown", handleClickOutside);
|
||||
return () => {
|
||||
document.removeEventListener("mousedown", handleClickOutside);
|
||||
};
|
||||
}, [ref]);
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={ref}
|
||||
onClick={() => setIsOpen(!isOpen)}
|
||||
style={{
|
||||
position: "relative",
|
||||
...theme.text.primary,
|
||||
...theme.background.secondary,
|
||||
...theme.border.primary,
|
||||
cursor: "pointer",
|
||||
maxWidth: 150,
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
padding: "0px 4px 0px 8px",
|
||||
height: 24,
|
||||
justifyContent: "unset",
|
||||
gridAutoFlow: "column",
|
||||
display: "grid",
|
||||
alignItems: "center",
|
||||
gap: 2,
|
||||
}}
|
||||
>
|
||||
{props.options.find(({ value }) => selected === value)!.label}
|
||||
</div>
|
||||
{isOpen && (
|
||||
<DropdownOptions
|
||||
{...props}
|
||||
selected={selected}
|
||||
onChange={(value) => {
|
||||
setIsOpen(false);
|
||||
setSelected(value);
|
||||
props.onChange(value);
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
|
@ -0,0 +1 @@
|
|||
export * from "./Dropdown";
|
|
@ -0,0 +1,3 @@
|
|||
export * from "./Button";
|
||||
export * from "./Chart";
|
||||
export * from "./Dropdown";
|
|
@ -0,0 +1,25 @@
|
|||
interface Config {
|
||||
baseUrl: string;
|
||||
api: { url: string };
|
||||
authIFrameUrl: string;
|
||||
localstorageKeys: {
|
||||
token: string;
|
||||
};
|
||||
webflow: {
|
||||
appId: string;
|
||||
};
|
||||
}
|
||||
|
||||
const baseUrl = process.env.BASE_URL || "https://app.nocodelytics.com";
|
||||
|
||||
export const config: Config = {
|
||||
baseUrl,
|
||||
authIFrameUrl: `${baseUrl}/webflow-auth-iframe`,
|
||||
api: { url: baseUrl + "/api" },
|
||||
localstorageKeys: {
|
||||
token: process.env.LOCALSTORAGE_KEY_TOKEN || "nocodelytics:token", // allows you to easily switch between env or users for debugging
|
||||
},
|
||||
webflow: {
|
||||
appId: "64cd1cc2aa1df4ca56c397eb",
|
||||
},
|
||||
};
|
|
@ -0,0 +1,60 @@
|
|||
import React, { useEffect, useState } from "react";
|
||||
import { LineChart } from "../components";
|
||||
import {
|
||||
ChartDataQueryVariables,
|
||||
useChartDataQuery,
|
||||
} from "../generated/graphql";
|
||||
import { useCurrentSiteInfo } from "../hooks";
|
||||
|
||||
interface ChartProps {
|
||||
input: ChartDataQueryVariables["input"];
|
||||
}
|
||||
|
||||
export const Chart: React.FC<ChartProps> = (props) => {
|
||||
const currentSiteInfo = useCurrentSiteInfo();
|
||||
const chartDataQueryResults = useChartDataQuery({
|
||||
variables: {
|
||||
input: {
|
||||
siteId: currentSiteInfo.data.nocodelyticsId,
|
||||
...props.input,
|
||||
},
|
||||
},
|
||||
skip: !currentSiteInfo.data.nocodelyticsId,
|
||||
});
|
||||
|
||||
const loading: boolean =
|
||||
chartDataQueryResults.loading || currentSiteInfo.loading;
|
||||
const error: string | undefined =
|
||||
chartDataQueryResults.error?.message || currentSiteInfo.error;
|
||||
const data = chartDataQueryResults.data;
|
||||
if (loading) {
|
||||
return <div>Loading</div>;
|
||||
}
|
||||
if (error) {
|
||||
return <div style={{ color: "red" }}>{error}</div>;
|
||||
}
|
||||
if (!data?.chartData) {
|
||||
return <div>No data</div>;
|
||||
}
|
||||
const total = data?.chartData.data[0].values.reduce(
|
||||
(acc, item) => acc + item.value,
|
||||
0
|
||||
);
|
||||
return (
|
||||
<div>
|
||||
<div style={{ height: 175, width: "100%" }}>
|
||||
<LineChart
|
||||
title={`${props.input.metricType} (${total})`}
|
||||
data={data?.chartData.data[0].values.reduce(
|
||||
(acc, item) => {
|
||||
acc.labels.push(new Date(Date.parse(item.label)));
|
||||
acc.values.push(item.value);
|
||||
return acc;
|
||||
},
|
||||
{ labels: [], values: [] }
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
|
@ -0,0 +1,486 @@
|
|||
import { FieldPolicy, FieldReadFunction, TypePolicies, TypePolicy } from '@apollo/client/cache';
|
||||
export type AdminReportKeySpecifier = ('users' | AdminReportKeySpecifier)[];
|
||||
export type AdminReportFieldPolicy = {
|
||||
users?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type CheckScriptHeaderResultsKeySpecifier = ('errorMessage' | 'found' | 'headerContent' | CheckScriptHeaderResultsKeySpecifier)[];
|
||||
export type CheckScriptHeaderResultsFieldPolicy = {
|
||||
errorMessage?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
found?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
headerContent?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type CmsMetricValueKeySpecifier = ('name' | 'value' | 'webflowItemId' | CmsMetricValueKeySpecifier)[];
|
||||
export type CmsMetricValueFieldPolicy = {
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
value?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
webflowItemId?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type DashboardKeySpecifier = ('createdAt' | 'gridLayout' | 'id' | 'isPublic' | 'name' | 'organisationId' | 'siteId' | 'updatedAt' | DashboardKeySpecifier)[];
|
||||
export type DashboardFieldPolicy = {
|
||||
createdAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
gridLayout?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
isPublic?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
organisationId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
siteId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
updatedAt?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type DashboardGridLayoutItemKeySpecifier = ('h' | 'id' | 'w' | 'x' | 'y' | DashboardGridLayoutItemKeySpecifier)[];
|
||||
export type DashboardGridLayoutItemFieldPolicy = {
|
||||
h?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
w?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
x?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
y?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type FeaturesKeySpecifier = ('memberFilter' | FeaturesKeySpecifier)[];
|
||||
export type FeaturesFieldPolicy = {
|
||||
memberFilter?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MeKeySpecifier = ('organisations' | 'user' | MeKeySpecifier)[];
|
||||
export type MeFieldPolicy = {
|
||||
organisations?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
user?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MeOrganisationKeySpecifier = ('id' | MeOrganisationKeySpecifier)[];
|
||||
export type MeOrganisationFieldPolicy = {
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MetricKeySpecifier = ('breakdownBy' | 'chartData' | 'cssSelector' | 'dashboardId' | 'id' | 'metricType' | 'name' | 'path' | 'uniqueVisitor' | 'webflowCollectionId' | MetricKeySpecifier)[];
|
||||
export type MetricFieldPolicy = {
|
||||
breakdownBy?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
chartData?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cssSelector?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
dashboardId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
metricType?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
path?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
uniqueVisitor?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
webflowCollectionId?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MetricByValueKeySpecifier = ('name' | 'value' | MetricByValueKeySpecifier)[];
|
||||
export type MetricByValueFieldPolicy = {
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
value?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MetricChartKeySpecifier = ('data' | 'delta' | 'fromCache' | 'lastSync' | 'name' | 'queryTime' | 'total' | MetricChartKeySpecifier)[];
|
||||
export type MetricChartFieldPolicy = {
|
||||
data?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
delta?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
fromCache?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
lastSync?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
queryTime?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
total?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MetricChartDataKeySpecifier = ('name' | 'values' | MetricChartDataKeySpecifier)[];
|
||||
export type MetricChartDataFieldPolicy = {
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
values?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MetricChartDataValuesKeySpecifier = ('label' | 'value' | MetricChartDataValuesKeySpecifier)[];
|
||||
export type MetricChartDataValuesFieldPolicy = {
|
||||
label?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
value?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MetricEventKeySpecifier = ('cmsCollectionItemSlug' | 'cmsCollectionSlug' | 'cmsWebflowCollectionId' | 'cmsWebflowItemId' | 'createdAt' | 'cssClass' | 'cssId' | 'currentUrl' | 'deviceBrand' | 'deviceClientEngine' | 'deviceClientEngineVersion' | 'deviceClientName' | 'deviceClientType' | 'deviceClientVersion' | 'deviceId' | 'deviceModel' | 'deviceOsName' | 'deviceOsPlatform' | 'deviceOsVersion' | 'deviceType' | 'deviceUserAgent' | 'domain' | 'eventType' | 'formDisplayedAt' | 'formLastInteractionAt' | 'formSubmittedAt' | 'geoIpCity' | 'geoIpCountry' | 'geoIpEu' | 'geoIpLatitude' | 'geoIpLongitude' | 'geoIpRegion' | 'geoIpTimezone' | 'id' | 'ipAddress' | 'path' | 'referer' | 'siteId' | 'updatedAt' | 'value' | 'visitorId' | MetricEventKeySpecifier)[];
|
||||
export type MetricEventFieldPolicy = {
|
||||
cmsCollectionItemSlug?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cmsCollectionSlug?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cmsWebflowCollectionId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cmsWebflowItemId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
createdAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cssClass?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cssId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
currentUrl?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceBrand?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceClientEngine?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceClientEngineVersion?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceClientName?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceClientType?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceClientVersion?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceModel?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceOsName?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceOsPlatform?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceOsVersion?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceType?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deviceUserAgent?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
domain?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
eventType?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
formDisplayedAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
formLastInteractionAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
formSubmittedAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
geoIpCity?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
geoIpCountry?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
geoIpEu?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
geoIpLatitude?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
geoIpLongitude?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
geoIpRegion?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
geoIpTimezone?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
ipAddress?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
path?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
referer?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
siteId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
updatedAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
value?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
visitorId?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MetricValueKeySpecifier = ('date' | 'value' | MetricValueKeySpecifier)[];
|
||||
export type MetricValueFieldPolicy = {
|
||||
date?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
value?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MetricValueResultsKeySpecifier = ('label' | 'values' | MetricValueResultsKeySpecifier)[];
|
||||
export type MetricValueResultsFieldPolicy = {
|
||||
label?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
values?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type MutationKeySpecifier = ('checkScriptHeader' | 'createDashboard' | 'createMetric' | 'createToken' | 'deleteDashboard' | 'deleteMetric' | 'deleteSite' | 'findOrUpdateVisitor' | 'renewToken' | 'reportError' | 'resetCacheBySiteId' | 'sendMagicLink' | 'signIn' | 'signUpWithWebflow' | 'syncSiteWithWebflow' | 'syncWebflowSites' | 'updateDashboard' | 'updateMetric' | 'updateSiteById' | 'updateSiteGridLayout' | MutationKeySpecifier)[];
|
||||
export type MutationFieldPolicy = {
|
||||
checkScriptHeader?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
createDashboard?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
createMetric?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
createToken?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deleteDashboard?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deleteMetric?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
deleteSite?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
findOrUpdateVisitor?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
renewToken?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
reportError?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
resetCacheBySiteId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
sendMagicLink?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
signIn?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
signUpWithWebflow?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
syncSiteWithWebflow?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
syncWebflowSites?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
updateDashboard?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
updateMetric?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
updateSiteById?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
updateSiteGridLayout?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type OrganisationKeySpecifier = ('features' | 'id' | OrganisationKeySpecifier)[];
|
||||
export type OrganisationFieldPolicy = {
|
||||
features?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type PageInfoKeySpecifier = ('hasNextPage' | PageInfoKeySpecifier)[];
|
||||
export type PageInfoFieldPolicy = {
|
||||
hasNextPage?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type PaginationKeySpecifier = ('hasMore' | 'total' | PaginationKeySpecifier)[];
|
||||
export type PaginationFieldPolicy = {
|
||||
hasMore?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
total?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type QueryKeySpecifier = ('adminReport' | 'chartData' | 'dashboard' | 'dashboardBySiteId' | 'eventTypes' | 'features' | 'maintenance' | 'me' | 'metric' | 'metricByValues' | 'metricTypes' | 'metricValues' | 'metricsByDashboardId' | 'metricsBySiteId' | 'organisation' | 'queueEvents' | 'site' | 'siteById' | 'siteByWebflowId' | 'siteHtmlElements' | 'sites' | 'stripeCustomerPortalLink' | 'users' | 'visitor' | 'visitors' | QueryKeySpecifier)[];
|
||||
export type QueryFieldPolicy = {
|
||||
adminReport?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
chartData?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
dashboard?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
dashboardBySiteId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
eventTypes?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
features?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
maintenance?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
me?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
metric?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
metricByValues?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
metricTypes?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
metricValues?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
metricsByDashboardId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
metricsBySiteId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
organisation?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
queueEvents?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
site?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
siteById?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
siteByWebflowId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
siteHtmlElements?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
sites?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
stripeCustomerPortalLink?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
users?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
visitor?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
visitors?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type QueueEventKeySpecifier = ('cmsItemIndex' | 'cmsItemSlug' | 'cmsListIndex' | 'createdAt' | 'cssClass' | 'cssId' | 'domain' | 'eventType' | 'formStage' | 'id' | 'ip' | 'path' | 'referer' | 'siteId' | 'userAgent' | 'value' | 'visitorId' | QueueEventKeySpecifier)[];
|
||||
export type QueueEventFieldPolicy = {
|
||||
cmsItemIndex?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cmsItemSlug?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cmsListIndex?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
createdAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cssClass?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
cssId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
domain?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
eventType?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
formStage?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
ip?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
path?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
referer?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
siteId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
userAgent?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
value?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
visitorId?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type SiteKeySpecifier = ('collections' | 'createdAt' | 'dashboards' | 'domains' | 'eventSources' | 'gridLayout' | 'id' | 'isEnabled' | 'isPublic' | 'metrics' | 'name' | 'organisationId' | 'previewUrl' | 'shortName' | 'totalMetricsCount' | 'updatedAt' | 'webflowId' | SiteKeySpecifier)[];
|
||||
export type SiteFieldPolicy = {
|
||||
collections?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
createdAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
dashboards?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
domains?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
eventSources?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
gridLayout?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
isEnabled?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
isPublic?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
metrics?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
organisationId?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
previewUrl?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
shortName?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
totalMetricsCount?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
updatedAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
webflowId?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type SiteEdgeKeySpecifier = ('cursor' | 'node' | SiteEdgeKeySpecifier)[];
|
||||
export type SiteEdgeFieldPolicy = {
|
||||
cursor?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
node?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type SiteGridLayoutItemKeySpecifier = ('h' | 'id' | 'w' | 'x' | 'y' | SiteGridLayoutItemKeySpecifier)[];
|
||||
export type SiteGridLayoutItemFieldPolicy = {
|
||||
h?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
w?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
x?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
y?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type SiteHtmlElementKeySpecifier = ('html' | 'id' | 'text' | SiteHtmlElementKeySpecifier)[];
|
||||
export type SiteHtmlElementFieldPolicy = {
|
||||
html?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
text?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type SitePaginatedKeySpecifier = ('edges' | 'pageInfo' | 'totalCount' | SitePaginatedKeySpecifier)[];
|
||||
export type SitePaginatedFieldPolicy = {
|
||||
edges?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
pageInfo?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
totalCount?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type UserKeySpecifier = ('createdAt' | 'email' | 'firstname' | 'id' | 'lastname' | UserKeySpecifier)[];
|
||||
export type UserFieldPolicy = {
|
||||
createdAt?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
email?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
firstname?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
lastname?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type UserEdgeKeySpecifier = ('cursor' | 'node' | UserEdgeKeySpecifier)[];
|
||||
export type UserEdgeFieldPolicy = {
|
||||
cursor?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
node?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type UserPaginatedKeySpecifier = ('edges' | 'pageInfo' | 'totalCount' | UserPaginatedKeySpecifier)[];
|
||||
export type UserPaginatedFieldPolicy = {
|
||||
edges?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
pageInfo?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
totalCount?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type VisitorKeySpecifier = ('city' | 'country' | 'device' | 'emailAddress' | 'events' | 'id' | 'initialReferer' | 'lastInteraction' | VisitorKeySpecifier)[];
|
||||
export type VisitorFieldPolicy = {
|
||||
city?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
country?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
device?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
emailAddress?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
events?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
initialReferer?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
lastInteraction?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type VisitorEdgeKeySpecifier = ('cursor' | 'node' | VisitorEdgeKeySpecifier)[];
|
||||
export type VisitorEdgeFieldPolicy = {
|
||||
cursor?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
node?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type VisitorPaginatedKeySpecifier = ('edges' | 'pageInfo' | 'totalCount' | VisitorPaginatedKeySpecifier)[];
|
||||
export type VisitorPaginatedFieldPolicy = {
|
||||
edges?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
pageInfo?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
totalCount?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type WebflowCollectionKeySpecifier = ('fields' | 'id' | 'items' | 'name' | WebflowCollectionKeySpecifier)[];
|
||||
export type WebflowCollectionFieldPolicy = {
|
||||
fields?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
items?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type WebflowCollectionFieldsKeySpecifier = ('id' | 'name' | 'slug' | 'type' | WebflowCollectionFieldsKeySpecifier)[];
|
||||
export type WebflowCollectionFieldsFieldPolicy = {
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
slug?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
type?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type WebflowCollectionItemsKeySpecifier = ('id' | 'name' | WebflowCollectionItemsKeySpecifier)[];
|
||||
export type WebflowCollectionItemsFieldPolicy = {
|
||||
id?: FieldPolicy<any> | FieldReadFunction<any>,
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type WebflowSitesKeySpecifier = ('name' | WebflowSitesKeySpecifier)[];
|
||||
export type WebflowSitesFieldPolicy = {
|
||||
name?: FieldPolicy<any> | FieldReadFunction<any>
|
||||
};
|
||||
export type StrictTypedTypePolicies = {
|
||||
AdminReport?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | AdminReportKeySpecifier | (() => undefined | AdminReportKeySpecifier),
|
||||
fields?: AdminReportFieldPolicy,
|
||||
},
|
||||
CheckScriptHeaderResults?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | CheckScriptHeaderResultsKeySpecifier | (() => undefined | CheckScriptHeaderResultsKeySpecifier),
|
||||
fields?: CheckScriptHeaderResultsFieldPolicy,
|
||||
},
|
||||
CmsMetricValue?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | CmsMetricValueKeySpecifier | (() => undefined | CmsMetricValueKeySpecifier),
|
||||
fields?: CmsMetricValueFieldPolicy,
|
||||
},
|
||||
Dashboard?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | DashboardKeySpecifier | (() => undefined | DashboardKeySpecifier),
|
||||
fields?: DashboardFieldPolicy,
|
||||
},
|
||||
DashboardGridLayoutItem?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | DashboardGridLayoutItemKeySpecifier | (() => undefined | DashboardGridLayoutItemKeySpecifier),
|
||||
fields?: DashboardGridLayoutItemFieldPolicy,
|
||||
},
|
||||
Features?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | FeaturesKeySpecifier | (() => undefined | FeaturesKeySpecifier),
|
||||
fields?: FeaturesFieldPolicy,
|
||||
},
|
||||
Me?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MeKeySpecifier | (() => undefined | MeKeySpecifier),
|
||||
fields?: MeFieldPolicy,
|
||||
},
|
||||
MeOrganisation?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MeOrganisationKeySpecifier | (() => undefined | MeOrganisationKeySpecifier),
|
||||
fields?: MeOrganisationFieldPolicy,
|
||||
},
|
||||
Metric?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MetricKeySpecifier | (() => undefined | MetricKeySpecifier),
|
||||
fields?: MetricFieldPolicy,
|
||||
},
|
||||
MetricByValue?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MetricByValueKeySpecifier | (() => undefined | MetricByValueKeySpecifier),
|
||||
fields?: MetricByValueFieldPolicy,
|
||||
},
|
||||
MetricChart?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MetricChartKeySpecifier | (() => undefined | MetricChartKeySpecifier),
|
||||
fields?: MetricChartFieldPolicy,
|
||||
},
|
||||
MetricChartData?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MetricChartDataKeySpecifier | (() => undefined | MetricChartDataKeySpecifier),
|
||||
fields?: MetricChartDataFieldPolicy,
|
||||
},
|
||||
MetricChartDataValues?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MetricChartDataValuesKeySpecifier | (() => undefined | MetricChartDataValuesKeySpecifier),
|
||||
fields?: MetricChartDataValuesFieldPolicy,
|
||||
},
|
||||
MetricEvent?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MetricEventKeySpecifier | (() => undefined | MetricEventKeySpecifier),
|
||||
fields?: MetricEventFieldPolicy,
|
||||
},
|
||||
MetricValue?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MetricValueKeySpecifier | (() => undefined | MetricValueKeySpecifier),
|
||||
fields?: MetricValueFieldPolicy,
|
||||
},
|
||||
MetricValueResults?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MetricValueResultsKeySpecifier | (() => undefined | MetricValueResultsKeySpecifier),
|
||||
fields?: MetricValueResultsFieldPolicy,
|
||||
},
|
||||
Mutation?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | MutationKeySpecifier | (() => undefined | MutationKeySpecifier),
|
||||
fields?: MutationFieldPolicy,
|
||||
},
|
||||
Organisation?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | OrganisationKeySpecifier | (() => undefined | OrganisationKeySpecifier),
|
||||
fields?: OrganisationFieldPolicy,
|
||||
},
|
||||
PageInfo?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | PageInfoKeySpecifier | (() => undefined | PageInfoKeySpecifier),
|
||||
fields?: PageInfoFieldPolicy,
|
||||
},
|
||||
Pagination?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | PaginationKeySpecifier | (() => undefined | PaginationKeySpecifier),
|
||||
fields?: PaginationFieldPolicy,
|
||||
},
|
||||
Query?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | QueryKeySpecifier | (() => undefined | QueryKeySpecifier),
|
||||
fields?: QueryFieldPolicy,
|
||||
},
|
||||
QueueEvent?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | QueueEventKeySpecifier | (() => undefined | QueueEventKeySpecifier),
|
||||
fields?: QueueEventFieldPolicy,
|
||||
},
|
||||
Site?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | SiteKeySpecifier | (() => undefined | SiteKeySpecifier),
|
||||
fields?: SiteFieldPolicy,
|
||||
},
|
||||
SiteEdge?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | SiteEdgeKeySpecifier | (() => undefined | SiteEdgeKeySpecifier),
|
||||
fields?: SiteEdgeFieldPolicy,
|
||||
},
|
||||
SiteGridLayoutItem?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | SiteGridLayoutItemKeySpecifier | (() => undefined | SiteGridLayoutItemKeySpecifier),
|
||||
fields?: SiteGridLayoutItemFieldPolicy,
|
||||
},
|
||||
SiteHtmlElement?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | SiteHtmlElementKeySpecifier | (() => undefined | SiteHtmlElementKeySpecifier),
|
||||
fields?: SiteHtmlElementFieldPolicy,
|
||||
},
|
||||
SitePaginated?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | SitePaginatedKeySpecifier | (() => undefined | SitePaginatedKeySpecifier),
|
||||
fields?: SitePaginatedFieldPolicy,
|
||||
},
|
||||
User?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | UserKeySpecifier | (() => undefined | UserKeySpecifier),
|
||||
fields?: UserFieldPolicy,
|
||||
},
|
||||
UserEdge?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | UserEdgeKeySpecifier | (() => undefined | UserEdgeKeySpecifier),
|
||||
fields?: UserEdgeFieldPolicy,
|
||||
},
|
||||
UserPaginated?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | UserPaginatedKeySpecifier | (() => undefined | UserPaginatedKeySpecifier),
|
||||
fields?: UserPaginatedFieldPolicy,
|
||||
},
|
||||
Visitor?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | VisitorKeySpecifier | (() => undefined | VisitorKeySpecifier),
|
||||
fields?: VisitorFieldPolicy,
|
||||
},
|
||||
VisitorEdge?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | VisitorEdgeKeySpecifier | (() => undefined | VisitorEdgeKeySpecifier),
|
||||
fields?: VisitorEdgeFieldPolicy,
|
||||
},
|
||||
VisitorPaginated?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | VisitorPaginatedKeySpecifier | (() => undefined | VisitorPaginatedKeySpecifier),
|
||||
fields?: VisitorPaginatedFieldPolicy,
|
||||
},
|
||||
WebflowCollection?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | WebflowCollectionKeySpecifier | (() => undefined | WebflowCollectionKeySpecifier),
|
||||
fields?: WebflowCollectionFieldPolicy,
|
||||
},
|
||||
WebflowCollectionFields?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | WebflowCollectionFieldsKeySpecifier | (() => undefined | WebflowCollectionFieldsKeySpecifier),
|
||||
fields?: WebflowCollectionFieldsFieldPolicy,
|
||||
},
|
||||
WebflowCollectionItems?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | WebflowCollectionItemsKeySpecifier | (() => undefined | WebflowCollectionItemsKeySpecifier),
|
||||
fields?: WebflowCollectionItemsFieldPolicy,
|
||||
},
|
||||
WebflowSites?: Omit<TypePolicy, "fields" | "keyFields"> & {
|
||||
keyFields?: false | WebflowSitesKeySpecifier | (() => undefined | WebflowSitesKeySpecifier),
|
||||
fields?: WebflowSitesFieldPolicy,
|
||||
}
|
||||
};
|
||||
export type TypedTypePolicies = StrictTypedTypePolicies & TypePolicies;
|
|
@ -0,0 +1,943 @@
|
|||
import { gql } from '@apollo/client';
|
||||
import * as Apollo from '@apollo/client';
|
||||
export type Maybe<T> = T | null | undefined;
|
||||
export type InputMaybe<T> = T | null | undefined;
|
||||
export type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };
|
||||
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };
|
||||
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };
|
||||
export type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };
|
||||
export type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };
|
||||
const defaultOptions = {} as const;
|
||||
/** All built-in and custom scalars, mapped to their actual values */
|
||||
export type Scalars = {
|
||||
ID: { input: string; output: string; }
|
||||
String: { input: string; output: string; }
|
||||
Boolean: { input: boolean; output: boolean; }
|
||||
Int: { input: number; output: number; }
|
||||
Float: { input: number; output: number; }
|
||||
BigInt: { input: any; output: any; }
|
||||
Byte: { input: any; output: any; }
|
||||
Currency: { input: any; output: any; }
|
||||
Date: { input: any; output: any; }
|
||||
DateTime: { input: any; output: any; }
|
||||
Duration: { input: any; output: any; }
|
||||
EmailAddress: { input: any; output: any; }
|
||||
GUID: { input: any; output: any; }
|
||||
HSL: { input: any; output: any; }
|
||||
HSLA: { input: any; output: any; }
|
||||
HexColorCode: { input: any; output: any; }
|
||||
Hexadecimal: { input: any; output: any; }
|
||||
IBAN: { input: any; output: any; }
|
||||
IPv4: { input: any; output: any; }
|
||||
IPv6: { input: any; output: any; }
|
||||
ISBN: { input: any; output: any; }
|
||||
ISO8601Duration: { input: any; output: any; }
|
||||
JSON: { input: any; output: any; }
|
||||
JSONObject: { input: any; output: any; }
|
||||
JWT: { input: any; output: any; }
|
||||
Latitude: { input: any; output: any; }
|
||||
LocalDate: { input: any; output: any; }
|
||||
LocalEndTime: { input: any; output: any; }
|
||||
LocalTime: { input: any; output: any; }
|
||||
Long: { input: any; output: any; }
|
||||
Longitude: { input: any; output: any; }
|
||||
MAC: { input: any; output: any; }
|
||||
NegativeFloat: { input: any; output: any; }
|
||||
NegativeInt: { input: any; output: any; }
|
||||
NonEmptyString: { input: any; output: any; }
|
||||
NonNegativeFloat: { input: any; output: any; }
|
||||
NonNegativeInt: { input: any; output: any; }
|
||||
NonPositiveFloat: { input: any; output: any; }
|
||||
NonPositiveInt: { input: any; output: any; }
|
||||
ObjectID: { input: any; output: any; }
|
||||
PhoneNumber: { input: any; output: any; }
|
||||
Port: { input: any; output: any; }
|
||||
PositiveFloat: { input: any; output: any; }
|
||||
PositiveInt: { input: any; output: any; }
|
||||
PostalCode: { input: any; output: any; }
|
||||
RGB: { input: any; output: any; }
|
||||
RGBA: { input: any; output: any; }
|
||||
SafeInt: { input: any; output: any; }
|
||||
Time: { input: any; output: any; }
|
||||
Timestamp: { input: any; output: any; }
|
||||
URL: { input: any; output: any; }
|
||||
USCurrency: { input: any; output: any; }
|
||||
UUID: { input: any; output: any; }
|
||||
UnsignedFloat: { input: any; output: any; }
|
||||
UnsignedInt: { input: any; output: any; }
|
||||
UtcOffset: { input: any; output: any; }
|
||||
Void: { input: any; output: any; }
|
||||
};
|
||||
|
||||
export type AdminReport = {
|
||||
__typename?: 'AdminReport';
|
||||
users: Array<User>;
|
||||
};
|
||||
|
||||
export type CheckScriptHeaderResults = {
|
||||
__typename?: 'CheckScriptHeaderResults';
|
||||
errorMessage?: Maybe<Scalars['String']['output']>;
|
||||
found: Scalars['Boolean']['output'];
|
||||
headerContent: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
export type CmsMetricValue = {
|
||||
__typename?: 'CmsMetricValue';
|
||||
name: Scalars['String']['output'];
|
||||
value: Scalars['PositiveInt']['output'];
|
||||
webflowItemId: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
export type CreateDashboardInput = {
|
||||
name: Scalars['String']['input'];
|
||||
siteId: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
export type CreateMetricEventInput = {
|
||||
cssClass?: InputMaybe<Scalars['String']['input']>;
|
||||
cssId?: InputMaybe<Scalars['String']['input']>;
|
||||
eventType: EventType;
|
||||
id?: InputMaybe<Scalars['UUID']['input']>;
|
||||
locationHref: Scalars['String']['input'];
|
||||
referer?: InputMaybe<Scalars['String']['input']>;
|
||||
siteId: Scalars['String']['input'];
|
||||
value?: InputMaybe<Scalars['String']['input']>;
|
||||
visitor: VisitorInput;
|
||||
};
|
||||
|
||||
export type CreateMetricInput = {
|
||||
breakdownBy?: InputMaybe<MetricChartBreakdownBy>;
|
||||
cssSelector?: InputMaybe<Scalars['String']['input']>;
|
||||
dashboardId: Scalars['String']['input'];
|
||||
metricType: MetricType;
|
||||
name: Scalars['String']['input'];
|
||||
path?: InputMaybe<Scalars['String']['input']>;
|
||||
uniqueVisitor?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
webflowCollectionId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type CreateSiteGridLayoutItemInput = {
|
||||
h: Scalars['PositiveInt']['input'];
|
||||
id: Scalars['String']['input'];
|
||||
w: Scalars['PositiveInt']['input'];
|
||||
x: Scalars['PositiveInt']['input'];
|
||||
y: Scalars['PositiveInt']['input'];
|
||||
};
|
||||
|
||||
export type Dashboard = {
|
||||
__typename?: 'Dashboard';
|
||||
createdAt: Scalars['Date']['output'];
|
||||
gridLayout?: Maybe<Array<SiteGridLayoutItem>>;
|
||||
id: Scalars['String']['output'];
|
||||
isPublic: Scalars['Boolean']['output'];
|
||||
name: Scalars['String']['output'];
|
||||
organisationId: Scalars['String']['output'];
|
||||
siteId: Scalars['String']['output'];
|
||||
updatedAt: Scalars['Date']['output'];
|
||||
};
|
||||
|
||||
export type DashboardGridLayoutItem = {
|
||||
__typename?: 'DashboardGridLayoutItem';
|
||||
h: Scalars['PositiveInt']['output'];
|
||||
id: Scalars['String']['output'];
|
||||
w: Scalars['PositiveInt']['output'];
|
||||
x: Scalars['PositiveInt']['output'];
|
||||
y: Scalars['PositiveInt']['output'];
|
||||
};
|
||||
|
||||
export enum EventType {
|
||||
Click = 'click',
|
||||
Cms = 'cms',
|
||||
Form = 'form',
|
||||
Keyboard = 'keyboard',
|
||||
View = 'view'
|
||||
}
|
||||
|
||||
export enum Feature {
|
||||
EmbeddableDashboard = 'EmbeddableDashboard',
|
||||
HistoricalData = 'HistoricalData',
|
||||
LiveData = 'LiveData',
|
||||
Membership = 'Membership',
|
||||
OneMillionVisitors = 'OneMillionVisitors',
|
||||
OneThousandVisitors = 'OneThousandVisitors',
|
||||
TenThousandVisitors = 'TenThousandVisitors',
|
||||
UnlimitedMetrics = 'UnlimitedMetrics',
|
||||
UnlimitedSites = 'UnlimitedSites'
|
||||
}
|
||||
|
||||
export type Features = {
|
||||
__typename?: 'Features';
|
||||
memberFilter: Scalars['Boolean']['output'];
|
||||
};
|
||||
|
||||
export type Me = {
|
||||
__typename?: 'Me';
|
||||
organisations: Array<MeOrganisation>;
|
||||
user: User;
|
||||
};
|
||||
|
||||
export type MeOrganisation = {
|
||||
__typename?: 'MeOrganisation';
|
||||
id: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
export type Metric = {
|
||||
__typename?: 'Metric';
|
||||
breakdownBy?: Maybe<MetricChartBreakdownBy>;
|
||||
chartData?: Maybe<MetricChart>;
|
||||
cssSelector?: Maybe<Scalars['String']['output']>;
|
||||
dashboardId: Scalars['String']['output'];
|
||||
id: Scalars['ID']['output'];
|
||||
metricType: MetricType;
|
||||
name: Scalars['String']['output'];
|
||||
path?: Maybe<Scalars['String']['output']>;
|
||||
uniqueVisitor?: Maybe<Scalars['Boolean']['output']>;
|
||||
webflowCollectionId?: Maybe<Scalars['String']['output']>;
|
||||
};
|
||||
|
||||
|
||||
export type MetricChartDataArgs = {
|
||||
input: MetricChartInput;
|
||||
};
|
||||
|
||||
export type MetricByValue = {
|
||||
__typename?: 'MetricByValue';
|
||||
name: Scalars['String']['output'];
|
||||
value: Scalars['PositiveInt']['output'];
|
||||
};
|
||||
|
||||
export type MetricChart = {
|
||||
__typename?: 'MetricChart';
|
||||
data: Array<MetricChartData>;
|
||||
delta?: Maybe<Scalars['Int']['output']>;
|
||||
fromCache?: Maybe<Scalars['Boolean']['output']>;
|
||||
lastSync?: Maybe<Scalars['Date']['output']>;
|
||||
name: Scalars['String']['output'];
|
||||
queryTime?: Maybe<Scalars['Float']['output']>;
|
||||
total?: Maybe<Scalars['Int']['output']>;
|
||||
};
|
||||
|
||||
export enum MetricChartBreakdownBy {
|
||||
City = 'City',
|
||||
ClientName = 'ClientName',
|
||||
Country = 'Country',
|
||||
CssClass = 'CssClass',
|
||||
CssId = 'CssId',
|
||||
DeviceBrand = 'DeviceBrand',
|
||||
DeviceModel = 'DeviceModel',
|
||||
DeviceType = 'DeviceType',
|
||||
None = 'None',
|
||||
OsName = 'OsName',
|
||||
Path = 'Path',
|
||||
Referer = 'Referer'
|
||||
}
|
||||
|
||||
export type MetricChartData = {
|
||||
__typename?: 'MetricChartData';
|
||||
name: Scalars['String']['output'];
|
||||
values: Array<MetricChartDataValues>;
|
||||
};
|
||||
|
||||
export type MetricChartDataValues = {
|
||||
__typename?: 'MetricChartDataValues';
|
||||
label: Scalars['String']['output'];
|
||||
value: Scalars['Int']['output'];
|
||||
};
|
||||
|
||||
export type MetricChartInput = {
|
||||
breakdownBy?: InputMaybe<MetricChartBreakdownBy>;
|
||||
country?: InputMaybe<Scalars['String']['input']>;
|
||||
cssSelector?: InputMaybe<Scalars['String']['input']>;
|
||||
domain?: InputMaybe<Scalars['String']['input']>;
|
||||
emailAddress?: InputMaybe<Scalars['String']['input']>;
|
||||
endAt?: InputMaybe<Scalars['String']['input']>;
|
||||
ipAddress?: InputMaybe<Scalars['String']['input']>;
|
||||
isMember?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
memberId?: InputMaybe<Scalars['String']['input']>;
|
||||
metricId?: InputMaybe<Scalars['String']['input']>;
|
||||
metricType?: InputMaybe<MetricType>;
|
||||
path?: InputMaybe<Scalars['String']['input']>;
|
||||
referer?: InputMaybe<Scalars['String']['input']>;
|
||||
siteId?: InputMaybe<Scalars['String']['input']>;
|
||||
skipCache?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
startAt?: InputMaybe<Scalars['String']['input']>;
|
||||
timeframe?: InputMaybe<MetricTimeframe>;
|
||||
uniqueVisitor?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
value?: InputMaybe<Scalars['String']['input']>;
|
||||
visitorId?: InputMaybe<Scalars['String']['input']>;
|
||||
webflowCollectionId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type MetricEvent = {
|
||||
__typename?: 'MetricEvent';
|
||||
cmsCollectionItemSlug?: Maybe<Scalars['String']['output']>;
|
||||
cmsCollectionSlug?: Maybe<Scalars['String']['output']>;
|
||||
cmsWebflowCollectionId?: Maybe<Scalars['String']['output']>;
|
||||
cmsWebflowItemId?: Maybe<Scalars['String']['output']>;
|
||||
createdAt?: Maybe<Scalars['Date']['output']>;
|
||||
cssClass?: Maybe<Scalars['String']['output']>;
|
||||
cssId?: Maybe<Scalars['String']['output']>;
|
||||
currentUrl?: Maybe<Scalars['String']['output']>;
|
||||
deviceBrand?: Maybe<Scalars['String']['output']>;
|
||||
deviceClientEngine?: Maybe<Scalars['String']['output']>;
|
||||
deviceClientEngineVersion?: Maybe<Scalars['String']['output']>;
|
||||
deviceClientName?: Maybe<Scalars['String']['output']>;
|
||||
deviceClientType?: Maybe<Scalars['String']['output']>;
|
||||
deviceClientVersion?: Maybe<Scalars['String']['output']>;
|
||||
deviceId?: Maybe<Scalars['String']['output']>;
|
||||
deviceModel?: Maybe<Scalars['String']['output']>;
|
||||
deviceOsName?: Maybe<Scalars['String']['output']>;
|
||||
deviceOsPlatform?: Maybe<Scalars['String']['output']>;
|
||||
deviceOsVersion?: Maybe<Scalars['String']['output']>;
|
||||
deviceType?: Maybe<Scalars['String']['output']>;
|
||||
deviceUserAgent?: Maybe<Scalars['String']['output']>;
|
||||
domain?: Maybe<Scalars['String']['output']>;
|
||||
eventType: EventType;
|
||||
formDisplayedAt?: Maybe<Scalars['Date']['output']>;
|
||||
formLastInteractionAt?: Maybe<Scalars['Date']['output']>;
|
||||
formSubmittedAt?: Maybe<Scalars['Date']['output']>;
|
||||
geoIpCity?: Maybe<Scalars['String']['output']>;
|
||||
geoIpCountry?: Maybe<Scalars['String']['output']>;
|
||||
geoIpEu?: Maybe<Scalars['Boolean']['output']>;
|
||||
geoIpLatitude?: Maybe<Scalars['Float']['output']>;
|
||||
geoIpLongitude?: Maybe<Scalars['Float']['output']>;
|
||||
geoIpRegion?: Maybe<Scalars['String']['output']>;
|
||||
geoIpTimezone?: Maybe<Scalars['String']['output']>;
|
||||
id: Scalars['ID']['output'];
|
||||
ipAddress?: Maybe<Scalars['String']['output']>;
|
||||
path?: Maybe<Scalars['String']['output']>;
|
||||
referer?: Maybe<Scalars['String']['output']>;
|
||||
siteId?: Maybe<Scalars['String']['output']>;
|
||||
updatedAt?: Maybe<Scalars['Date']['output']>;
|
||||
value?: Maybe<Scalars['String']['output']>;
|
||||
visitorId?: Maybe<Scalars['String']['output']>;
|
||||
};
|
||||
|
||||
export type MetricFilters = {
|
||||
isMember?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
};
|
||||
|
||||
export enum MetricInterval {
|
||||
Day = 'day',
|
||||
Hour = 'hour',
|
||||
Month = 'month'
|
||||
}
|
||||
|
||||
export enum MetricTimeframe {
|
||||
Custom = 'Custom',
|
||||
Last3Months = 'Last3Months',
|
||||
Last6Months = 'Last6Months',
|
||||
Last7days = 'Last7days',
|
||||
Last30days = 'Last30days',
|
||||
LastYear = 'LastYear',
|
||||
Today = 'Today',
|
||||
Yesterday = 'Yesterday'
|
||||
}
|
||||
|
||||
export enum MetricType {
|
||||
Click = 'Click',
|
||||
Cms = 'Cms',
|
||||
CustomField = 'CustomField',
|
||||
Form = 'Form',
|
||||
Keyboard = 'Keyboard',
|
||||
TopCountries = 'TopCountries',
|
||||
TopPages = 'TopPages',
|
||||
TopReferers = 'TopReferers',
|
||||
View = 'View',
|
||||
Visitors = 'Visitors'
|
||||
}
|
||||
|
||||
export type MetricValue = {
|
||||
__typename?: 'MetricValue';
|
||||
date: Scalars['Date']['output'];
|
||||
value: Scalars['PositiveInt']['output'];
|
||||
};
|
||||
|
||||
export type MetricValueResults = {
|
||||
__typename?: 'MetricValueResults';
|
||||
label?: Maybe<Scalars['String']['output']>;
|
||||
values: Array<MetricValue>;
|
||||
};
|
||||
|
||||
export type MetricValuesInput = {
|
||||
cssSelector?: InputMaybe<Scalars['String']['input']>;
|
||||
endAt?: InputMaybe<Scalars['String']['input']>;
|
||||
metricType: MetricType;
|
||||
path?: InputMaybe<Scalars['String']['input']>;
|
||||
siteId: Scalars['String']['input'];
|
||||
startAt: Scalars['String']['input'];
|
||||
webflowCollectionId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type Mutation = {
|
||||
__typename?: 'Mutation';
|
||||
checkScriptHeader: CheckScriptHeaderResults;
|
||||
createDashboard: Dashboard;
|
||||
createMetric: Metric;
|
||||
createToken: Scalars['String']['output'];
|
||||
deleteDashboard: Scalars['Boolean']['output'];
|
||||
deleteMetric: Scalars['String']['output'];
|
||||
deleteSite: Scalars['String']['output'];
|
||||
findOrUpdateVisitor: Visitor;
|
||||
renewToken: Scalars['String']['output'];
|
||||
reportError: Scalars['Boolean']['output'];
|
||||
resetCacheBySiteId: Scalars['Boolean']['output'];
|
||||
sendMagicLink: Scalars['Boolean']['output'];
|
||||
signIn: Scalars['String']['output'];
|
||||
signUpWithWebflow: Scalars['String']['output'];
|
||||
syncSiteWithWebflow: Scalars['Boolean']['output'];
|
||||
syncWebflowSites: Scalars['Boolean']['output'];
|
||||
updateDashboard: Dashboard;
|
||||
updateMetric: Metric;
|
||||
updateSiteById: Site;
|
||||
updateSiteGridLayout?: Maybe<Site>;
|
||||
};
|
||||
|
||||
|
||||
export type MutationCheckScriptHeaderArgs = {
|
||||
siteId: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationCreateDashboardArgs = {
|
||||
input: CreateDashboardInput;
|
||||
};
|
||||
|
||||
|
||||
export type MutationCreateMetricArgs = {
|
||||
metric: CreateMetricInput;
|
||||
};
|
||||
|
||||
|
||||
export type MutationCreateTokenArgs = {
|
||||
userId: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationDeleteDashboardArgs = {
|
||||
id: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationDeleteMetricArgs = {
|
||||
metricId: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationDeleteSiteArgs = {
|
||||
siteId: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationFindOrUpdateVisitorArgs = {
|
||||
emailAddress?: InputMaybe<Scalars['String']['input']>;
|
||||
memberstackId?: InputMaybe<Scalars['String']['input']>;
|
||||
outsetaId?: InputMaybe<Scalars['String']['input']>;
|
||||
visitorId: Scalars['UUID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationReportErrorArgs = {
|
||||
input: ReportErrorInput;
|
||||
};
|
||||
|
||||
|
||||
export type MutationResetCacheBySiteIdArgs = {
|
||||
siteId: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationSendMagicLinkArgs = {
|
||||
email: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationSignInArgs = {
|
||||
token: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationSignUpWithWebflowArgs = {
|
||||
code: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationSyncSiteWithWebflowArgs = {
|
||||
siteId: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationUpdateDashboardArgs = {
|
||||
input: UpdateDashboardInput;
|
||||
};
|
||||
|
||||
|
||||
export type MutationUpdateMetricArgs = {
|
||||
metric: UpdateMetricInput;
|
||||
};
|
||||
|
||||
|
||||
export type MutationUpdateSiteByIdArgs = {
|
||||
input: UpdateSiteByIdInput;
|
||||
};
|
||||
|
||||
|
||||
export type MutationUpdateSiteGridLayoutArgs = {
|
||||
newGridLayout: Array<CreateSiteGridLayoutItemInput>;
|
||||
siteId: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
export type Organisation = {
|
||||
__typename?: 'Organisation';
|
||||
features: Array<Feature>;
|
||||
id: Scalars['ID']['output'];
|
||||
};
|
||||
|
||||
export type PageInfo = {
|
||||
__typename?: 'PageInfo';
|
||||
hasNextPage: Scalars['Boolean']['output'];
|
||||
};
|
||||
|
||||
export type Pagination = {
|
||||
__typename?: 'Pagination';
|
||||
hasMore: Scalars['Boolean']['output'];
|
||||
total: Scalars['PositiveInt']['output'];
|
||||
};
|
||||
|
||||
export type PaginationInput = {
|
||||
cursor?: InputMaybe<Scalars['String']['input']>;
|
||||
limit?: InputMaybe<Scalars['PositiveInt']['input']>;
|
||||
};
|
||||
|
||||
export type Query = {
|
||||
__typename?: 'Query';
|
||||
adminReport: AdminReport;
|
||||
chartData: MetricChart;
|
||||
dashboard: Dashboard;
|
||||
dashboardBySiteId: Array<Dashboard>;
|
||||
eventTypes: Array<EventType>;
|
||||
features?: Maybe<Features>;
|
||||
maintenance: Scalars['Boolean']['output'];
|
||||
me?: Maybe<Me>;
|
||||
metric: Metric;
|
||||
metricByValues: Array<MetricByValue>;
|
||||
metricTypes: Array<MetricType>;
|
||||
metricValues: Array<MetricValueResults>;
|
||||
metricsByDashboardId: Array<Metric>;
|
||||
metricsBySiteId: Array<Metric>;
|
||||
organisation: Organisation;
|
||||
queueEvents?: Maybe<Array<Maybe<QueueEvent>>>;
|
||||
site: Site;
|
||||
/** @deprecated Use 'site' instead. */
|
||||
siteById: Site;
|
||||
siteByWebflowId: Site;
|
||||
siteHtmlElements: Array<SiteHtmlElement>;
|
||||
sites: SitePaginated;
|
||||
stripeCustomerPortalLink: Scalars['String']['output'];
|
||||
users: UserPaginated;
|
||||
visitor?: Maybe<Visitor>;
|
||||
visitors: VisitorPaginated;
|
||||
};
|
||||
|
||||
|
||||
export type QueryChartDataArgs = {
|
||||
input: MetricChartInput;
|
||||
};
|
||||
|
||||
|
||||
export type QueryDashboardArgs = {
|
||||
id: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QueryDashboardBySiteIdArgs = {
|
||||
siteId: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QueryMetricArgs = {
|
||||
id: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QueryMetricByValuesArgs = {
|
||||
filters?: InputMaybe<MetricFilters>;
|
||||
input: MetricValuesInput;
|
||||
};
|
||||
|
||||
|
||||
export type QueryMetricValuesArgs = {
|
||||
filters?: InputMaybe<MetricFilters>;
|
||||
input: MetricValuesInput;
|
||||
};
|
||||
|
||||
|
||||
export type QueryMetricsByDashboardIdArgs = {
|
||||
dashboardById: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QueryMetricsBySiteIdArgs = {
|
||||
siteId: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QueryOrganisationArgs = {
|
||||
organisationId?: InputMaybe<Scalars['ID']['input']>;
|
||||
siteId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryQueueEventsArgs = {
|
||||
siteId: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QuerySiteArgs = {
|
||||
id: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QuerySiteByIdArgs = {
|
||||
id: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QuerySiteByWebflowIdArgs = {
|
||||
webflowId: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QuerySiteHtmlElementsArgs = {
|
||||
siteId: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QuerySitesArgs = {
|
||||
cursor?: InputMaybe<Scalars['String']['input']>;
|
||||
filters?: InputMaybe<SitesFilters>;
|
||||
first?: InputMaybe<Scalars['PositiveInt']['input']>;
|
||||
organisationId: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QueryUsersArgs = {
|
||||
cursor?: InputMaybe<Scalars['String']['input']>;
|
||||
first?: InputMaybe<Scalars['PositiveInt']['input']>;
|
||||
search?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryVisitorArgs = {
|
||||
id: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QueryVisitorsArgs = {
|
||||
filters: VisitorsFilters;
|
||||
first?: InputMaybe<Scalars['PositiveInt']['input']>;
|
||||
offset?: InputMaybe<Scalars['PositiveInt']['input']>;
|
||||
};
|
||||
|
||||
export type QueueEvent = {
|
||||
__typename?: 'QueueEvent';
|
||||
cmsItemIndex?: Maybe<Scalars['Int']['output']>;
|
||||
cmsItemSlug?: Maybe<Scalars['String']['output']>;
|
||||
cmsListIndex?: Maybe<Scalars['Int']['output']>;
|
||||
createdAt?: Maybe<Scalars['String']['output']>;
|
||||
cssClass?: Maybe<Scalars['String']['output']>;
|
||||
cssId?: Maybe<Scalars['String']['output']>;
|
||||
domain?: Maybe<Scalars['String']['output']>;
|
||||
eventType?: Maybe<Scalars['String']['output']>;
|
||||
formStage?: Maybe<Scalars['String']['output']>;
|
||||
id?: Maybe<Scalars['String']['output']>;
|
||||
ip?: Maybe<Scalars['String']['output']>;
|
||||
path?: Maybe<Scalars['String']['output']>;
|
||||
referer?: Maybe<Scalars['String']['output']>;
|
||||
siteId?: Maybe<Scalars['String']['output']>;
|
||||
userAgent?: Maybe<Scalars['String']['output']>;
|
||||
value?: Maybe<Scalars['String']['output']>;
|
||||
visitorId?: Maybe<Scalars['String']['output']>;
|
||||
};
|
||||
|
||||
export type ReportErrorInput = {
|
||||
error?: InputMaybe<Scalars['JSON']['input']>;
|
||||
from: Scalars['String']['input'];
|
||||
message?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type Site = {
|
||||
__typename?: 'Site';
|
||||
collections: Array<WebflowCollection>;
|
||||
createdAt: Scalars['Date']['output'];
|
||||
dashboards?: Maybe<Array<Dashboard>>;
|
||||
domains?: Maybe<Array<Scalars['String']['output']>>;
|
||||
eventSources?: Maybe<Array<Scalars['String']['output']>>;
|
||||
gridLayout?: Maybe<Array<SiteGridLayoutItem>>;
|
||||
id: Scalars['ID']['output'];
|
||||
isEnabled: Scalars['Boolean']['output'];
|
||||
isPublic: Scalars['Boolean']['output'];
|
||||
metrics?: Maybe<Array<Metric>>;
|
||||
name: Scalars['String']['output'];
|
||||
organisationId: Scalars['String']['output'];
|
||||
previewUrl?: Maybe<Scalars['String']['output']>;
|
||||
shortName?: Maybe<Scalars['String']['output']>;
|
||||
totalMetricsCount?: Maybe<Scalars['PositiveInt']['output']>;
|
||||
updatedAt: Scalars['Date']['output'];
|
||||
webflowId: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
|
||||
export type SiteEventSourcesArgs = {
|
||||
filter?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type SiteEdge = {
|
||||
__typename?: 'SiteEdge';
|
||||
cursor: Scalars['String']['output'];
|
||||
node: Site;
|
||||
};
|
||||
|
||||
export type SiteGridLayoutItem = {
|
||||
__typename?: 'SiteGridLayoutItem';
|
||||
h: Scalars['PositiveInt']['output'];
|
||||
id: Scalars['String']['output'];
|
||||
w: Scalars['PositiveInt']['output'];
|
||||
x: Scalars['PositiveInt']['output'];
|
||||
y: Scalars['PositiveInt']['output'];
|
||||
};
|
||||
|
||||
export type SiteHtmlElement = {
|
||||
__typename?: 'SiteHtmlElement';
|
||||
html: Scalars['String']['output'];
|
||||
id: Scalars['String']['output'];
|
||||
text?: Maybe<Scalars['String']['output']>;
|
||||
};
|
||||
|
||||
export type SitePaginated = {
|
||||
__typename?: 'SitePaginated';
|
||||
edges: Array<SiteEdge>;
|
||||
pageInfo: PageInfo;
|
||||
totalCount: Scalars['PositiveInt']['output'];
|
||||
};
|
||||
|
||||
export type SitesFilters = {
|
||||
name?: InputMaybe<Scalars['String']['input']>;
|
||||
organisationId?: InputMaybe<Scalars['String']['input']>;
|
||||
userId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type UpdateDashboardGridLayoutItem = {
|
||||
h: Scalars['PositiveInt']['input'];
|
||||
id: Scalars['String']['input'];
|
||||
w: Scalars['PositiveInt']['input'];
|
||||
x: Scalars['PositiveInt']['input'];
|
||||
y: Scalars['PositiveInt']['input'];
|
||||
};
|
||||
|
||||
export type UpdateDashboardInput = {
|
||||
gridLayout?: InputMaybe<Array<UpdateDashboardGridLayoutItem>>;
|
||||
id: Scalars['String']['input'];
|
||||
isPublic?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
name?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type UpdateMetricInput = {
|
||||
breakdownBy?: InputMaybe<MetricChartBreakdownBy>;
|
||||
cssSelector?: InputMaybe<Scalars['String']['input']>;
|
||||
id: Scalars['ID']['input'];
|
||||
metricType?: InputMaybe<MetricType>;
|
||||
name?: InputMaybe<Scalars['String']['input']>;
|
||||
path?: InputMaybe<Scalars['String']['input']>;
|
||||
uniqueVisitor?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
webflowCollectionId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type UpdateSiteByIdInput = {
|
||||
id: Scalars['String']['input'];
|
||||
isPublic?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
};
|
||||
|
||||
export type User = {
|
||||
__typename?: 'User';
|
||||
createdAt: Scalars['Date']['output'];
|
||||
email: Scalars['String']['output'];
|
||||
firstname?: Maybe<Scalars['String']['output']>;
|
||||
id: Scalars['String']['output'];
|
||||
lastname?: Maybe<Scalars['String']['output']>;
|
||||
};
|
||||
|
||||
export type UserEdge = {
|
||||
__typename?: 'UserEdge';
|
||||
cursor: Scalars['String']['output'];
|
||||
node: User;
|
||||
};
|
||||
|
||||
export type UserPaginated = {
|
||||
__typename?: 'UserPaginated';
|
||||
edges: Array<UserEdge>;
|
||||
pageInfo: PageInfo;
|
||||
totalCount: Scalars['PositiveInt']['output'];
|
||||
};
|
||||
|
||||
export type Visitor = {
|
||||
__typename?: 'Visitor';
|
||||
city?: Maybe<Scalars['String']['output']>;
|
||||
country?: Maybe<Scalars['String']['output']>;
|
||||
device?: Maybe<Scalars['String']['output']>;
|
||||
emailAddress?: Maybe<Scalars['String']['output']>;
|
||||
events: Array<MetricEvent>;
|
||||
id: Scalars['ID']['output'];
|
||||
initialReferer?: Maybe<Scalars['String']['output']>;
|
||||
lastInteraction: Scalars['Date']['output'];
|
||||
};
|
||||
|
||||
export type VisitorEdge = {
|
||||
__typename?: 'VisitorEdge';
|
||||
cursor: Scalars['String']['output'];
|
||||
node: Visitor;
|
||||
};
|
||||
|
||||
export type VisitorInput = {
|
||||
emailAddress?: InputMaybe<Scalars['String']['input']>;
|
||||
id: Scalars['UUID']['input'];
|
||||
memberstackId?: InputMaybe<Scalars['String']['input']>;
|
||||
outsetaId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type VisitorPaginated = {
|
||||
__typename?: 'VisitorPaginated';
|
||||
edges: Array<VisitorEdge>;
|
||||
pageInfo: PageInfo;
|
||||
totalCount: Scalars['PositiveInt']['output'];
|
||||
};
|
||||
|
||||
export type VisitorsFilters = {
|
||||
emailAddress?: InputMaybe<Scalars['String']['input']>;
|
||||
endAt?: InputMaybe<Scalars['Date']['input']>;
|
||||
isMember?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
siteId: Scalars['String']['input'];
|
||||
startAt: Scalars['Date']['input'];
|
||||
visitorId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type WebflowCollection = {
|
||||
__typename?: 'WebflowCollection';
|
||||
fields: Array<WebflowCollectionFields>;
|
||||
id: Scalars['String']['output'];
|
||||
items: Array<WebflowCollectionItems>;
|
||||
name: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
export type WebflowCollectionFields = {
|
||||
__typename?: 'WebflowCollectionFields';
|
||||
id: Scalars['String']['output'];
|
||||
name: Scalars['String']['output'];
|
||||
slug: Scalars['String']['output'];
|
||||
type: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
export type WebflowCollectionItems = {
|
||||
__typename?: 'WebflowCollectionItems';
|
||||
id: Scalars['String']['output'];
|
||||
name: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
export type WebflowSites = {
|
||||
__typename?: 'WebflowSites';
|
||||
name: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
export type ChartDataQueryVariables = Exact<{
|
||||
input: MetricChartInput;
|
||||
}>;
|
||||
|
||||
|
||||
export type ChartDataQuery = { __typename?: 'Query', chartData: { __typename?: 'MetricChart', name: string, delta?: number | null | undefined, data: Array<{ __typename?: 'MetricChartData', name: string, values: Array<{ __typename?: 'MetricChartDataValues', label: string, value: number }> }> } };
|
||||
|
||||
export type SiteByWebflowIdQueryVariables = Exact<{
|
||||
webflowId: Scalars['String']['input'];
|
||||
}>;
|
||||
|
||||
|
||||
export type SiteByWebflowIdQuery = { __typename?: 'Query', siteByWebflowId: { __typename?: 'Site', id: string } };
|
||||
|
||||
|
||||
export const ChartDataDocument = gql`
|
||||
query chartData($input: MetricChartInput!) {
|
||||
chartData(input: $input) {
|
||||
name
|
||||
data {
|
||||
name
|
||||
values {
|
||||
label
|
||||
value
|
||||
}
|
||||
}
|
||||
delta
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* __useChartDataQuery__
|
||||
*
|
||||
* To run a query within a React component, call `useChartDataQuery` and pass it any options that fit your needs.
|
||||
* When your component renders, `useChartDataQuery` returns an object from Apollo Client that contains loading, error, and data properties
|
||||
* you can use to render your UI.
|
||||
*
|
||||
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
|
||||
*
|
||||
* @example
|
||||
* const { data, loading, error } = useChartDataQuery({
|
||||
* variables: {
|
||||
* input: // value for 'input'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
export function useChartDataQuery(baseOptions: Apollo.QueryHookOptions<ChartDataQuery, ChartDataQueryVariables>) {
|
||||
const options = {...defaultOptions, ...baseOptions}
|
||||
return Apollo.useQuery<ChartDataQuery, ChartDataQueryVariables>(ChartDataDocument, options);
|
||||
}
|
||||
export function useChartDataLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<ChartDataQuery, ChartDataQueryVariables>) {
|
||||
const options = {...defaultOptions, ...baseOptions}
|
||||
return Apollo.useLazyQuery<ChartDataQuery, ChartDataQueryVariables>(ChartDataDocument, options);
|
||||
}
|
||||
export type ChartDataQueryHookResult = ReturnType<typeof useChartDataQuery>;
|
||||
export type ChartDataLazyQueryHookResult = ReturnType<typeof useChartDataLazyQuery>;
|
||||
export type ChartDataQueryResult = Apollo.QueryResult<ChartDataQuery, ChartDataQueryVariables>;
|
||||
export const SiteByWebflowIdDocument = gql`
|
||||
query siteByWebflowId($webflowId: String!) {
|
||||
siteByWebflowId(webflowId: $webflowId) {
|
||||
id
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* __useSiteByWebflowIdQuery__
|
||||
*
|
||||
* To run a query within a React component, call `useSiteByWebflowIdQuery` and pass it any options that fit your needs.
|
||||
* When your component renders, `useSiteByWebflowIdQuery` returns an object from Apollo Client that contains loading, error, and data properties
|
||||
* you can use to render your UI.
|
||||
*
|
||||
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
|
||||
*
|
||||
* @example
|
||||
* const { data, loading, error } = useSiteByWebflowIdQuery({
|
||||
* variables: {
|
||||
* webflowId: // value for 'webflowId'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
export function useSiteByWebflowIdQuery(baseOptions: Apollo.QueryHookOptions<SiteByWebflowIdQuery, SiteByWebflowIdQueryVariables>) {
|
||||
const options = {...defaultOptions, ...baseOptions}
|
||||
return Apollo.useQuery<SiteByWebflowIdQuery, SiteByWebflowIdQueryVariables>(SiteByWebflowIdDocument, options);
|
||||
}
|
||||
export function useSiteByWebflowIdLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<SiteByWebflowIdQuery, SiteByWebflowIdQueryVariables>) {
|
||||
const options = {...defaultOptions, ...baseOptions}
|
||||
return Apollo.useLazyQuery<SiteByWebflowIdQuery, SiteByWebflowIdQueryVariables>(SiteByWebflowIdDocument, options);
|
||||
}
|
||||
export type SiteByWebflowIdQueryHookResult = ReturnType<typeof useSiteByWebflowIdQuery>;
|
||||
export type SiteByWebflowIdLazyQueryHookResult = ReturnType<typeof useSiteByWebflowIdLazyQuery>;
|
||||
export type SiteByWebflowIdQueryResult = Apollo.QueryResult<SiteByWebflowIdQuery, SiteByWebflowIdQueryVariables>;
|
|
@ -0,0 +1,13 @@
|
|||
query chartData($input: MetricChartInput!) {
|
||||
chartData(input: $input) {
|
||||
name
|
||||
data {
|
||||
name
|
||||
values {
|
||||
label
|
||||
value
|
||||
}
|
||||
}
|
||||
delta
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
query siteByWebflowId($webflowId: String!) {
|
||||
siteByWebflowId(webflowId: $webflowId) {
|
||||
id
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
export * from "./useCurrentSiteInfo";
|
||||
export * from "./useWebflowInfo";
|
|
@ -0,0 +1,32 @@
|
|||
import { useSiteByWebflowIdQuery } from "../generated/graphql";
|
||||
import { useWebflowInfo } from "./useWebflowInfo";
|
||||
|
||||
interface UseCurrentSiteIdResults {
|
||||
loading: boolean;
|
||||
error?: string;
|
||||
data: {
|
||||
webflowId?: string;
|
||||
nocodelyticsId?: string;
|
||||
};
|
||||
}
|
||||
|
||||
export const useCurrentSiteInfo = (): UseCurrentSiteIdResults => {
|
||||
const { webflowSiteLoading, webflowId, webflowError } = useWebflowInfo();
|
||||
|
||||
const siteByWebflowIdQueryResults = useSiteByWebflowIdQuery({
|
||||
variables: {
|
||||
webflowId,
|
||||
},
|
||||
skip: !webflowId,
|
||||
});
|
||||
const loading = webflowSiteLoading || siteByWebflowIdQueryResults.loading;
|
||||
const error = webflowError || siteByWebflowIdQueryResults.error?.message;
|
||||
return {
|
||||
loading,
|
||||
error,
|
||||
data: {
|
||||
webflowId,
|
||||
nocodelyticsId: siteByWebflowIdQueryResults.data?.siteByWebflowId.id,
|
||||
},
|
||||
};
|
||||
};
|
|
@ -0,0 +1,23 @@
|
|||
import { useState, useEffect } from "react";
|
||||
|
||||
export const useWebflowInfo = () => {
|
||||
const [webflowSiteLoading, setWebflowSiteLoading] = useState<boolean>(true);
|
||||
const [webflowId, setWebflowId] = useState<string>("");
|
||||
const [webflowError, setWebflowError] = useState<string>("");
|
||||
|
||||
useEffect(() => {
|
||||
webflow
|
||||
.getSiteInfo()
|
||||
.then(({ siteId }) => {
|
||||
setWebflowId(siteId);
|
||||
setWebflowSiteLoading(false);
|
||||
})
|
||||
.catch((error) => setWebflowError(error));
|
||||
}, []);
|
||||
|
||||
return {
|
||||
webflowSiteLoading,
|
||||
webflowId,
|
||||
webflowError,
|
||||
};
|
||||
};
|
|
@ -0,0 +1,10 @@
|
|||
import React from "react";
|
||||
import { createRoot } from "react-dom/client";
|
||||
import { App } from "./App";
|
||||
|
||||
if (typeof webflow === "undefined") {
|
||||
alert("Error: `webflow` object is not defined.");
|
||||
}
|
||||
const container = document.getElementById("root");
|
||||
const root = createRoot(container!);
|
||||
root.render(<App />);
|
|
@ -0,0 +1,24 @@
|
|||
import React from "react";
|
||||
import { config } from "../config";
|
||||
|
||||
export const DebugPage: React.FC = () => {
|
||||
return (
|
||||
<ul>
|
||||
<li>
|
||||
Token:{" "}
|
||||
{
|
||||
<input
|
||||
type="text"
|
||||
defaultValue={localStorage.getItem(config.localstorageKeys.token)!}
|
||||
onChange={(event) =>
|
||||
localStorage.setItem(
|
||||
config.localstorageKeys.token,
|
||||
event.target.value
|
||||
)
|
||||
}
|
||||
/>
|
||||
}
|
||||
</li>
|
||||
</ul>
|
||||
);
|
||||
};
|
|
@ -0,0 +1,50 @@
|
|||
import React, { useEffect, useState } from "react";
|
||||
import { Dropdown } from "../components";
|
||||
import { Chart } from "../containers/Chart";
|
||||
import { MetricType } from "../generated/graphql";
|
||||
|
||||
export const MetricDetailsPage: React.FC = () => {
|
||||
const [path, setPath] = useState<string>();
|
||||
const [timeframe, setTimeframe] = useState<string>("Last30days");
|
||||
|
||||
useEffect(() => {
|
||||
const unsubscribeCurrentPage = webflow.subscribe("currentpage", (page) => {
|
||||
setPath(`/${page.getSlug()}`);
|
||||
});
|
||||
webflow.getCurrentPage().then((page) => setPath(`/${page.getSlug()}`));
|
||||
return () => {
|
||||
unsubscribeCurrentPage();
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Dropdown
|
||||
selected="Last30days"
|
||||
options={[
|
||||
{ label: "Last 7 days", value: "Last7days" },
|
||||
{ label: "Last 30 days", value: "Last30days" },
|
||||
{ label: "Last 3 Months", value: "Last3Months" },
|
||||
{ label: "Last 6 Months", value: "Last6Months" },
|
||||
{ label: "Last Year", value: "LastYear" },
|
||||
]}
|
||||
onChange={(value) => {
|
||||
setTimeframe(value);
|
||||
}}
|
||||
/>
|
||||
<div style={{ marginTop: 10 }}>
|
||||
<Chart input={{ path, metricType: MetricType.View, timeframe }} />
|
||||
</div>
|
||||
<div style={{ marginTop: 30 }}>
|
||||
<Chart
|
||||
input={{
|
||||
path,
|
||||
metricType: MetricType.Visitors,
|
||||
uniqueVisitor: true,
|
||||
timeframe,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
|
@ -0,0 +1,2 @@
|
|||
export * from "./MetricDetailsPage";
|
||||
export * from "./DebugPage";
|
|
@ -0,0 +1,33 @@
|
|||
import { CSSProperties } from "react";
|
||||
|
||||
type Variant = "primary" | "secondary";
|
||||
|
||||
type ThemeVariants = {
|
||||
[K in Variant]?: CSSProperties;
|
||||
};
|
||||
|
||||
type Element = "text" | "background" | "border";
|
||||
|
||||
type Theme = {
|
||||
[K in Element]: ThemeVariants;
|
||||
};
|
||||
|
||||
/**
|
||||
* Quick hack with minimal info until webflow publishes a components lib
|
||||
*/
|
||||
export const theme: Theme = {
|
||||
text: {
|
||||
primary: { color: "#D9D9D9" },
|
||||
},
|
||||
background: {
|
||||
secondary: { backgroundColor: "#5E5E5E" },
|
||||
},
|
||||
border: {
|
||||
primary: {
|
||||
borderColor: "#363636",
|
||||
borderWidth: 1,
|
||||
borderRadius: 1,
|
||||
borderStyle: "solid",
|
||||
},
|
||||
},
|
||||
};
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"lib": ["DOM", "DOM.Iterable", "esnext"],
|
||||
"types": ["vite/client", "node", "css-font-loading-module"],
|
||||
"allowJs": false,
|
||||
"skipLibCheck": true,
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"strict": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"module": "esnext",
|
||||
"moduleResolution": "node",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "react",
|
||||
"rootDir": "./",
|
||||
"outDir": ".build"
|
||||
},
|
||||
"include": [
|
||||
"./src",
|
||||
"vitest.config.ts",
|
||||
"vitest.config.ts",
|
||||
"node_modules/@webflow/designer-extension-typings"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
import reactRefresh from "@vitejs/plugin-react-refresh";
|
||||
import dotenv from "dotenv";
|
||||
|
||||
import { defineConfig } from "vite";
|
||||
|
||||
dotenv.config();
|
||||
|
||||
// eslint-disable-next-line import/no-default-export
|
||||
export default defineConfig({
|
||||
base: "./",
|
||||
plugins: [reactRefresh()],
|
||||
server: {
|
||||
host: true,
|
||||
port: 1337,
|
||||
},
|
||||
optimizeDeps: {
|
||||
exclude: ["./webflow"],
|
||||
},
|
||||
define: {
|
||||
"process.env": {
|
||||
...process.env,
|
||||
},
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
"~bootstrap": "bootstrap",
|
||||
},
|
||||
},
|
||||
build: {
|
||||
outDir: "public",
|
||||
sourcemap: true,
|
||||
rollupOptions: {},
|
||||
},
|
||||
});
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"name": "nocodelytics",
|
||||
"publicDir": "public",
|
||||
"size": "comfortable"
|
||||
}
|
Loading…
Reference in New Issue