* esm * wip * wip * wip * wip * wip * wip * subscription notice * wip * wip * wip * fix envs * fix: update docker build * fix * esm/types * delete dashboard :D * add patches to dockerfiles * update packages + catalogs + ts * wip * remove native libs * ts * improvements * fix redirects and fetching session * try fix favicon * fixes * fix * order and resize reportds within a dashboard * improvements * wip * added userjot to dashboard * fix * add op * wip * different cache key * improve date picker * fix table * event details loading * redo onboarding completely * fix login * fix * fix * extend session, billing and improve bars * fix * reduce price on 10M
63 lines
1.4 KiB
Plaintext
63 lines
1.4 KiB
Plaintext
---
|
|
import type { OpenPanelMethodNames, OpenPanelOptions } from '@openpanel/web';
|
|
|
|
type Props = Omit<OpenPanelOptions, 'filter'> & {
|
|
profileId?: string;
|
|
cdnUrl?: string;
|
|
filter?: string;
|
|
globalProperties?: Record<string, unknown>;
|
|
};
|
|
|
|
const { profileId, cdnUrl, globalProperties, ...options } = Astro.props;
|
|
|
|
const CDN_URL = 'https://openpanel.dev/op1.js';
|
|
|
|
const stringify = (obj: unknown) => {
|
|
if (typeof obj === 'object' && obj !== null && obj !== undefined) {
|
|
const entries = Object.entries(obj).map(([key, value]) => {
|
|
if (key === 'filter') {
|
|
return `"${key}":${value}`;
|
|
}
|
|
return `"${key}":${JSON.stringify(value)}`;
|
|
});
|
|
return `{${entries.join(',')}}`;
|
|
}
|
|
|
|
return JSON.stringify(obj);
|
|
};
|
|
|
|
const methods: { name: OpenPanelMethodNames; value: unknown }[] = [
|
|
{
|
|
name: 'init',
|
|
value: {
|
|
...options,
|
|
sdk: 'astro',
|
|
sdkVersion: '1.0.1',
|
|
},
|
|
},
|
|
];
|
|
if (profileId) {
|
|
methods.push({
|
|
name: 'identify',
|
|
value: {
|
|
profileId,
|
|
},
|
|
});
|
|
}
|
|
if (globalProperties) {
|
|
methods.push({
|
|
name: 'setGlobalProperties',
|
|
value: globalProperties,
|
|
});
|
|
}
|
|
|
|
const scriptContent = `window.op = window.op || function(...args) {(window.op.q = window.op.q || []).push(args)};
|
|
${methods
|
|
.map((method) => {
|
|
return `window.op('${method.name}', ${stringify(method.value)});`;
|
|
})
|
|
.join('\n')}`;
|
|
---
|
|
|
|
<script src={cdnUrl ?? CDN_URL} async defer />
|
|
<script is:inline set:html={scriptContent} /> |