@remkoj/optimizely-one-nextjs 2.0.0-pre2 → 2.0.0-pre4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/experimentation-api.d.ts +3 -0
- package/dist/api/experimentation-api.js +33 -0
- package/dist/api/experimentation-api.js.map +1 -0
- package/dist/api/index.js +10 -3
- package/dist/api/index.js.map +1 -1
- package/dist/api/types.d.ts +1 -1
- package/dist/components/optimizely-one-gadget/index.js +31 -2
- package/dist/components/optimizely-one-gadget/index.js.map +1 -1
- package/dist/components/use-cookie.d.ts +13 -0
- package/dist/components/use-cookie.js +41 -0
- package/dist/components/use-cookie.js.map +1 -0
- package/dist/components/useCookie.d.ts +12 -0
- package/dist/components/useCookie.js +40 -0
- package/dist/components/useCookie.js.map +1 -0
- package/dist/components/useQueryParam.d.ts +2 -0
- package/dist/components/useQueryParam.js +28 -0
- package/dist/components/useQueryParam.js.map +1 -0
- package/dist/env-vars.d.ts +2 -1
- package/dist/env-vars.js +1 -0
- package/dist/env-vars.js.map +1 -1
- package/dist/server-components/scripts/header.js +2 -1
- package/dist/server-components/scripts/header.js.map +1 -1
- package/dist/server-components/scripts/snippets/optimizely-web-experimentation.d.ts +3 -1
- package/dist/server-components/scripts/snippets/optimizely-web-experimentation.js +3 -3
- package/dist/server-components/scripts/snippets/optimizely-web-experimentation.js.map +1 -1
- package/package.json +8 -6
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as EnvTools from '../utils/env';
|
|
2
|
+
import EnvVars from '../env-vars';
|
|
3
|
+
export const ExperimentationApiService = {
|
|
4
|
+
for: { path: '/exp', verb: 'get' },
|
|
5
|
+
handler: async (query, cookies) => {
|
|
6
|
+
const configuredProjectId = EnvTools.readValue(EnvVars.WebExperimentationProject);
|
|
7
|
+
const cookieProjectId = cookies.get("wx.projectid")?.value;
|
|
8
|
+
const queryProjectId = query.get('wx.projectid') ?? undefined;
|
|
9
|
+
const helperEnabled = EnvTools.readValueAsBoolean(EnvVars.HelperEnabled, false);
|
|
10
|
+
const projectId = helperEnabled ? cookieProjectId ?? queryProjectId ?? configuredProjectId : configuredProjectId;
|
|
11
|
+
// Make sure we have a Project ID
|
|
12
|
+
if (!projectId) {
|
|
13
|
+
if (EnvTools.readValueAsBoolean(EnvVars.OptimizelyDebug, false))
|
|
14
|
+
console.log("🔴 No Optimizely Web Experimentation Project ID identified");
|
|
15
|
+
return [{ error: { message: "Project not found", status: 404 } }, 404];
|
|
16
|
+
}
|
|
17
|
+
const snippetResponse = await fetch(`https://cdn.optimizely.com/js/${projectId}.js`, {
|
|
18
|
+
//@ts-expect-error: Next.JS extended fetch
|
|
19
|
+
next: {
|
|
20
|
+
revalidate: 900 // Cache the script for 15 minutes
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
if (!snippetResponse.ok) {
|
|
24
|
+
if (EnvTools.readValueAsBoolean(EnvVars.OptimizelyDebug, false))
|
|
25
|
+
console.log("🔴 Non OK response from the Optimizely Web Experimentation CDN");
|
|
26
|
+
return [{ error: { message: snippetResponse.statusText, status: snippetResponse.status } }, snippetResponse.status];
|
|
27
|
+
}
|
|
28
|
+
const body = await snippetResponse.text();
|
|
29
|
+
return [body, snippetResponse.status, "text/javascript; charset=utf-8"];
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
export default ExperimentationApiService;
|
|
33
|
+
//# sourceMappingURL=experimentation-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experimentation-api.js","sourceRoot":"","sources":["../../src/api/experimentation-api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,cAAc,CAAA;AACxC,OAAO,OAAO,MAAM,aAAa,CAAA;AAEjC,MAAM,CAAC,MAAM,yBAAyB,GAAqB;IACvD,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;IAClC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9B,MAAM,mBAAmB,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;QACjF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,KAAK,CAAA;QAC1D,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAA;QAC7D,MAAM,aAAa,GAAG,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;QAC/E,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,eAAe,IAAI,cAAc,IAAI,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAA;QAEhH,iCAAiC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;YAC7E,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,EAAE,EAAC,EAAE,GAAG,CAAC,CAAA;QACzE,CAAC;QAGD,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,iCAAkC,SAAU,KAAK,EAAE;YACnF,0CAA0C;YAC1C,IAAI,EAAE;gBACF,UAAU,EAAE,GAAG,CAAC,kCAAkC;aACrD;SACJ,CAAC,CAAA;QACF,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;YACtB,IAAI,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC;gBAC3D,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;YACjF,OAAO,CAAC,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAC,EAAC,EAAE,eAAe,CAAC,MAAM,CAAE,CAAA;QACrH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAA;QAEzC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAA;IAC3E,CAAC;CACJ,CAAA;AAED,eAAe,yBAAyB,CAAA"}
|
package/dist/api/index.js
CHANGED
|
@@ -3,12 +3,14 @@ import { NextResponse } from 'next/server';
|
|
|
3
3
|
import { cookies } from 'next/headers';
|
|
4
4
|
import ProfileApiService from './profile-api-service';
|
|
5
5
|
import GraphInfoApiService from './graph-info-service';
|
|
6
|
+
import ExperimentationApiService from './experimentation-api';
|
|
6
7
|
export function createOptimizelyOneApi(config) {
|
|
7
8
|
const pathParameterName = config?.pathParameterName ?? 'path';
|
|
8
9
|
const services = [
|
|
9
10
|
...(config?.services || []),
|
|
10
11
|
ProfileApiService,
|
|
11
|
-
GraphInfoApiService
|
|
12
|
+
GraphInfoApiService,
|
|
13
|
+
ExperimentationApiService
|
|
12
14
|
];
|
|
13
15
|
// Basic service matcher, but get's the job done for now
|
|
14
16
|
function matchService(verb, path, serviceFor) {
|
|
@@ -33,9 +35,14 @@ export function createOptimizelyOneApi(config) {
|
|
|
33
35
|
return NextResponse.json({ error: { status: 404, message: "Not found" } }, { status: 404 });
|
|
34
36
|
// Invoke the service
|
|
35
37
|
const c = cookies();
|
|
36
|
-
const [response, statusCode] = await apiService.handler(request.nextUrl.searchParams, c);
|
|
38
|
+
const [response, statusCode, contentType] = await apiService.handler(request.nextUrl.searchParams, c);
|
|
39
|
+
const headers = new Headers();
|
|
40
|
+
if (contentType)
|
|
41
|
+
headers.set("Content-Type", contentType);
|
|
37
42
|
// Return the outcome
|
|
38
|
-
|
|
43
|
+
if (typeof response == 'string')
|
|
44
|
+
return new NextResponse(response, { headers, status: statusCode });
|
|
45
|
+
return NextResponse.json(response, { headers, status: statusCode });
|
|
39
46
|
}
|
|
40
47
|
return handler;
|
|
41
48
|
}
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAoB,YAAY,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,iBAAiB,MAAM,uBAAuB,CAAA;AACrD,OAAO,mBAAmB,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,EAAoB,YAAY,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,iBAAiB,MAAM,uBAAuB,CAAA;AACrD,OAAO,mBAAmB,MAAM,sBAAsB,CAAA;AACtD,OAAO,yBAAyB,MAAM,uBAAuB,CAAA;AAkB7D,MAAM,UAAU,sBAAsB,CAAC,MAAwC;IAE3E,MAAM,iBAAiB,GAAG,MAAM,EAAE,iBAAiB,IAAI,MAAM,CAAA;IAC7D,MAAM,QAAQ,GAAG;QACb,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;QAC3B,iBAAiB;QACjB,mBAAmB;QACnB,yBAAyB;KAC5B,CAAA;IAED,wDAAwD;IACxD,SAAS,YAAY,CAAC,IAAY,EAAE,IAAY,EAAE,UAA6B;QAE3E,OAAO,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE;YACtD,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAA;IAC3D,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,OAAoB,EAAE,OAAuB;QAEhE,iEAAiE;QACjE,IAAI,OAAO,GAAmC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAC/E,IAAI,CAAC,OAAO;YAAE,OAAO,GAAG,GAAG,CAAA;aACtB,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;aAC7D,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,GAAG,GAAG,OAAO,CAAA;QAC1D,MAAM,IAAI,GAAY,OAAO,CAAA;QAC7B,qMAAqM;QACrM,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAA;QAE3B,mBAAmB;QACnB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAC,IAAI,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QAChF,IAAI,CAAC,UAAU;YACX,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,EAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAE9F,qBAAqB;QACrB,MAAM,CAAC,GAAG,OAAO,EAAE,CAAA;QACnB,MAAM,CAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAE,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;QAEvG,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,WAAW;YACX,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QAE5C,qBAAqB;QACrB,IAAI,OAAO,QAAQ,IAAI,QAAQ;YAC3B,OAAO,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;QACtE,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAA;IACvE,CAAC;IACD,OAAO,OAAO,CAAA;AAClB,CAAC"}
|
package/dist/api/types.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export type ApiServiceErrorMessage = {
|
|
|
6
6
|
message: string;
|
|
7
7
|
};
|
|
8
8
|
};
|
|
9
|
-
export type ApiServiceErrorResponse = [ApiServiceErrorMessage, number];
|
|
9
|
+
export type ApiServiceErrorResponse = [ApiServiceErrorMessage, number] | [string, number, string];
|
|
10
10
|
export type ApiServiceResponse<T extends {} = {}> = [T, 200 | undefined] | ApiServiceErrorResponse;
|
|
11
11
|
export type ApiService<T extends {} = {}> = {
|
|
12
12
|
for: {
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { Fragment, useLayoutEffect, useCallback } from 'react';
|
|
4
|
+
import useCookie from '../use-cookie';
|
|
5
|
+
import { Popover, PopoverButton, PopoverPanel, Tab, TabGroup, TabList, TabPanels, TabPanel } from '@headlessui/react';
|
|
4
6
|
import { ChevronUpIcon, UserGroupIcon, TagIcon, RocketLaunchIcon, IdentificationIcon, Square3Stack3DIcon } from '@heroicons/react/20/solid';
|
|
5
7
|
import OptiLogo from './logo';
|
|
6
8
|
import { useIsInTestMode } from '../use-test-mode';
|
|
9
|
+
import { useSearchParams, usePathname } from 'next/navigation';
|
|
7
10
|
// Import the Panel CSS
|
|
8
11
|
import '../../styles.css';
|
|
9
12
|
// Prepare panel imports
|
|
@@ -25,6 +28,32 @@ const Panels = {
|
|
|
25
28
|
*/
|
|
26
29
|
export const OptimizelyOneGadget = ({ servicePrefix = "/api/me", refreshInterval = 0, show = undefined }) => {
|
|
27
30
|
const inTestMode = useIsInTestMode();
|
|
31
|
+
const searchParams = useSearchParams();
|
|
32
|
+
const pathname = usePathname();
|
|
33
|
+
const wxProjectIdParam = searchParams.get('pid');
|
|
34
|
+
const [projectIdCookie, setProjectIdCookie, removeProjectIdCookie] = useCookie('wx.projectid');
|
|
35
|
+
const removeQueryParam = useCallback((paramName) => {
|
|
36
|
+
const newParams = new URLSearchParams(searchParams.toString());
|
|
37
|
+
if (newParams.has(paramName))
|
|
38
|
+
newParams.delete(paramName);
|
|
39
|
+
const newSearch = newParams.toString();
|
|
40
|
+
const newPath = pathname + (newSearch.length > 0 ? '?' + newParams.toString() : '');
|
|
41
|
+
try {
|
|
42
|
+
window.location.href = newPath;
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
console.log("🛑 Refreshing the page to apply the new Web Experimenation project failed, please refresh manually.");
|
|
46
|
+
}
|
|
47
|
+
}, [pathname, searchParams]);
|
|
48
|
+
useLayoutEffect(() => {
|
|
49
|
+
if (wxProjectIdParam != null && wxProjectIdParam != projectIdCookie) {
|
|
50
|
+
if (wxProjectIdParam == "")
|
|
51
|
+
removeProjectIdCookie();
|
|
52
|
+
else
|
|
53
|
+
setProjectIdCookie(wxProjectIdParam);
|
|
54
|
+
removeQueryParam('pid');
|
|
55
|
+
}
|
|
56
|
+
}, [wxProjectIdParam, projectIdCookie, removeQueryParam, removeProjectIdCookie, setProjectIdCookie]);
|
|
28
57
|
const forceHidden = show != undefined && show == false;
|
|
29
58
|
const forceShown = show != undefined && show == true;
|
|
30
59
|
if (forceHidden || (!forceShown && !inTestMode))
|
|
@@ -33,7 +62,7 @@ export const OptimizelyOneGadget = ({ servicePrefix = "/api/me", refreshInterval
|
|
|
33
62
|
console.log(`Optimizely One Demo API: ${servicePrefix}`);
|
|
34
63
|
console.log(`Refresh interval: ${refreshInterval == 0 ? 'DISABLED' : refreshInterval + 'ms'}`);
|
|
35
64
|
console.groupEnd();
|
|
36
|
-
return _jsxs(Popover, { className: "oo-gadget md:oo-fixed md:oo-bottom-0 oo-z-[500]", children: [_jsxs(
|
|
65
|
+
return _jsxs(Popover, { className: "oo-gadget md:oo-fixed md:oo-bottom-0 oo-z-[500]", children: [_jsxs(PopoverButton, { className: 'oo-fixed oo-bottom-0 oo-right-0 oo-w-full oo-h-[50px] oo-flex oo-flex-row oo-justify-between oo-p-2 oo-border-t oo-border-slate-500 oo-bg-slate-100 oo-text-slate-800 md:oo-w-[350px] md:oo-right-4 md:oo-rounded-t-md md:oo-border-x oo-z-[500] oo-p-[10px]', children: [_jsx(OptiLogo, { className: 'oo-w-auto oo-h-full' }), _jsx(ChevronUpIcon, { className: "oo-ui-open:oo-rotate-180 oo-ui-open:oo-transform oo-h-full oo-w-auto oo-inline-block" })] }), _jsxs(PopoverPanel, { className: "oo-fixed oo-bottom-[50px] oo-right-0 oo-w-full oo-top-0 md:oo-border md:oo-border-slate-300 oo-bg-white md:oo-right-4 md:oo-bottom-[55px] md:oo-w-[600px] oo-z-[501] oo-max-w-full oo-flex oo-flex-col oo-justify-stretch md:oo-h-[350px] md:oo-top-auto md:oo-rounded-md md:oo-shadow-xl md:oo-overflow-hidden", children: [_jsxs("div", { className: "oo-border-b oo-border-slate-300 oo-bg-slate-100 oo-text-slate-800 oo-text-[18px] oo-font-bold oo-p-1 oo-flex-none md:oo-p-2", children: [_jsx(IdentificationIcon, { className: 'oo-inline-block oo-h-[24px] oo-w-[24px] oo-mr-2 oo-text-blue-500' }), "My Profile"] }), _jsxs(TabGroup, { as: Fragment, children: [_jsxs(TabList, { className: "oo-flex-none oo-flex oo-justify-between md:oo-justify-start oo-gap-2 oo-p-1 md:oo-p-2 oo-pb-0 md:oo-pb-0 oo-border-b oo-border-slate-300 oo-text-[14px]", children: [_jsxs(Tab, { as: "div", className: 'oo-text-center oo-inline-block oo-cursor-pointer oo-px-2 oo-py-1 oo-border oo-border-b-0 oo-border-slate-300 oo-rounded-t-md oo-ui-selected:oo-bg-blue-500 oo-ui-selected:oo-text-white', children: [_jsx(TagIcon, { className: 'oo-inline-block oo-h-[18px] oo-w-[18px] oo-mr-2' }), "Interests"] }), _jsxs(Tab, { as: "div", className: 'oo-text-center oo-inline-block oo-cursor-pointer oo-px-2 oo-py-1 oo-border oo-border-b-0 oo-border-slate-300 oo-rounded-t-md oo-ui-selected:oo-bg-blue-500 oo-ui-selected:oo-text-white', children: [_jsx(UserGroupIcon, { className: 'oo-inline-block oo-h-[18px] oo-w-[18px] oo-mr-2' }), "Audiences"] }), _jsxs(Tab, { as: "div", className: 'oo-text-center oo-inline-block oo-cursor-pointer oo-px-2 oo-py-1 oo-border oo-border-b-0 oo-border-slate-300 oo-rounded-t-md oo-ui-selected:oo-bg-blue-500 oo-ui-selected:oo-text-white', children: [_jsx(RocketLaunchIcon, { className: 'oo-inline-block oo-h-[18px] oo-w-[18px] oo-mr-2' }), "Experiments"] }), _jsxs(Tab, { as: "div", className: 'oo-text-center oo-inline-block oo-cursor-pointer oo-px-2 oo-py-1 oo-border oo-border-b-0 oo-border-slate-300 oo-rounded-t-md oo-ui-selected:oo-bg-blue-500 oo-ui-selected:oo-text-white', children: [_jsx(IdentificationIcon, { className: 'oo-inline-block oo-h-[18px] oo-w-[18px] oo-mr-2' }), "Identifiers"] }), _jsxs(Tab, { as: "div", className: 'oo-text-center oo-inline-block oo-cursor-pointer oo-px-2 oo-py-1 oo-border oo-border-b-0 oo-border-slate-300 oo-rounded-t-md oo-ui-selected:oo-bg-blue-500 oo-ui-selected:oo-text-white', children: [_jsx(Square3Stack3DIcon, { className: 'oo-inline-block oo-h-[18px] oo-w-[18px] oo-mr-2' }), "Graph"] })] }), _jsxs(TabPanels, { className: "oo-flex-1 md:oo-h-24 oo-overscroll-contain oo-overflow-y-auto", children: [_jsx(TabPanel, { as: "div", className: 'oo-p-1 md:oo-p-2', children: _jsx(Panels.Interests, { servicePrefix: servicePrefix, refreshInterval: refreshInterval }) }), _jsx(TabPanel, { as: "div", className: 'oo-p-1 md:oo-p-2', children: _jsx(Panels.Audiences, { servicePrefix: servicePrefix, refreshInterval: refreshInterval }) }), _jsx(TabPanel, { as: "div", className: 'oo-p-1 md:oo-p-2', children: _jsx(Panels.Experiments, {}) }), _jsx(TabPanel, { as: "div", className: 'oo-p-1 md:oo-p-2', children: _jsx(Panels.Ids, { servicePrefix: servicePrefix, refreshInterval: refreshInterval }) }), _jsx(TabPanel, { as: "div", className: 'oo-p-1 md:oo-p-2', children: _jsx(Panels.Graph, { servicePrefix: servicePrefix }) })] })] })] })] });
|
|
37
66
|
};
|
|
38
67
|
export default OptimizelyOneGadget;
|
|
39
68
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/optimizely-one-gadget/index.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/optimizely-one-gadget/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function useCookie<T extends string | undefined>(cookieName: string, defaultValue?: T): [
|
|
2
|
+
T extends string ? string : string | undefined,
|
|
3
|
+
(newValue: T extends string ? string | undefined : string) => void,
|
|
4
|
+
() => void
|
|
5
|
+
];
|
|
6
|
+
/**
|
|
7
|
+
* Try fetching the DOM Document, returning null if the current DOM Document
|
|
8
|
+
* cannot be found (e.g. server side)
|
|
9
|
+
*
|
|
10
|
+
* @returns The Document or undefined when on server side
|
|
11
|
+
*/
|
|
12
|
+
export declare const useDocument: () => Document | undefined;
|
|
13
|
+
export default useCookie;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useCallback, useMemo } from "react";
|
|
2
|
+
export function useCookie(cookieName, defaultValue) {
|
|
3
|
+
const doc = useDocument();
|
|
4
|
+
const cv = useMemo(() => {
|
|
5
|
+
if (!doc)
|
|
6
|
+
return defaultValue;
|
|
7
|
+
const cookieData = doc.cookie.split(';').map(x => x.trim().split('=', 2).map(x => decodeURIComponent(x)));
|
|
8
|
+
const cookie = cookieData.filter(x => x[0] == cookieName)[0];
|
|
9
|
+
const val = (cookie ? cookie[1] ?? defaultValue : defaultValue);
|
|
10
|
+
return val;
|
|
11
|
+
}, [cookieName, defaultValue, doc]);
|
|
12
|
+
const sc = useCallback((newValue) => {
|
|
13
|
+
if (!doc)
|
|
14
|
+
return;
|
|
15
|
+
const cookieString = `${encodeURIComponent(cookieName)}=${encodeURIComponent(newValue ?? defaultValue ?? '')}`;
|
|
16
|
+
doc.cookie = cookieString;
|
|
17
|
+
}, [cookieName, doc]);
|
|
18
|
+
const rc = useCallback(() => {
|
|
19
|
+
if (!doc)
|
|
20
|
+
return;
|
|
21
|
+
const cookieString = `${encodeURIComponent(cookieName)}=`;
|
|
22
|
+
doc.cookie = cookieString;
|
|
23
|
+
}, [cookieName, doc]);
|
|
24
|
+
return [cv, sc, rc];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Try fetching the DOM Document, returning null if the current DOM Document
|
|
28
|
+
* cannot be found (e.g. server side)
|
|
29
|
+
*
|
|
30
|
+
* @returns The Document or undefined when on server side
|
|
31
|
+
*/
|
|
32
|
+
export const useDocument = () => {
|
|
33
|
+
try {
|
|
34
|
+
return window.document;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export default useCookie;
|
|
41
|
+
//# sourceMappingURL=use-cookie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-cookie.js","sourceRoot":"","sources":["../../src/components/use-cookie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE5C,MAAM,UAAU,SAAS,CAA+B,UAAkB,EAAE,YAAgB;IAMxF,MAAM,GAAG,GAAG,WAAW,EAAE,CAAA;IACzB,MAAM,EAAE,GAAG,OAAO,CAAiD,GAAG,EAAE;QACpE,IAAI,CAAC,GAAG;YACJ,OAAO,YAA8D,CAAA;QACzE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAA2B,CAAA;QACnI,MAAM,MAAM,GAA+B,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACxF,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAmD,CAAA;QACjH,OAAO,GAAG,CAAA;IACd,CAAC,EAAE,CAAE,UAAU,EAAE,YAAY,EAAE,GAAG,CAAE,CAAC,CAAA;IAErC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,QAAwD,EAAE,EAAE;QAChF,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,MAAM,YAAY,GAAG,GAAI,kBAAkB,CAAC,UAAU,CAAE,IAAK,kBAAkB,CAAC,QAAQ,IAAI,YAAY,IAAI,EAAE,CAAC,EAAE,CAAA;QACjH,GAAG,CAAC,MAAM,GAAG,YAAY,CAAA;IAC7B,CAAC,EAAE,CAAE,UAAU,EAAE,GAAG,CAAE,CAAC,CAAA;IAEvB,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QACxB,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,MAAM,YAAY,GAAG,GAAI,kBAAkB,CAAC,UAAU,CAAE,GAAG,CAAA;QAC3D,GAAG,CAAC,MAAM,GAAG,YAAY,CAAA;IAC7B,CAAC,EAAE,CAAE,UAAU,EAAE,GAAG,CAAE,CAAC,CAAA;IAEvB,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAE5B,IAAI,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAA;IACpB,CAAC;AACL,CAAC,CAAA;AAED,eAAe,SAAS,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function useCookie<T extends string | undefined>(cookieName: string, defaultValue?: T): [
|
|
2
|
+
T extends string ? string : string | undefined,
|
|
3
|
+
(newValue: T extends string ? string | undefined : string) => void,
|
|
4
|
+
() => void
|
|
5
|
+
];
|
|
6
|
+
/**
|
|
7
|
+
* Try fetching the DOM Document, returning null if the current DOM Document
|
|
8
|
+
* cannot be found (e.g. server side)
|
|
9
|
+
*
|
|
10
|
+
* @returns The Document or undefined when on server side
|
|
11
|
+
*/
|
|
12
|
+
export declare const useDocument: () => Document | undefined;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useCallback, useMemo } from "react";
|
|
2
|
+
export function useCookie(cookieName, defaultValue) {
|
|
3
|
+
const doc = useDocument();
|
|
4
|
+
const cv = useMemo(() => {
|
|
5
|
+
if (!doc)
|
|
6
|
+
return defaultValue;
|
|
7
|
+
const cookieData = doc.cookie.split(';').map(x => x.trim().split('=', 2).map(x => decodeURIComponent(x)));
|
|
8
|
+
const cookie = cookieData.filter(x => x[0] == cookieName)[0];
|
|
9
|
+
const val = (cookie ? cookie[1] ?? defaultValue : defaultValue);
|
|
10
|
+
return val;
|
|
11
|
+
}, [cookieName, defaultValue, doc]);
|
|
12
|
+
const sc = useCallback((newValue) => {
|
|
13
|
+
if (!doc)
|
|
14
|
+
return;
|
|
15
|
+
const cookieString = `${encodeURIComponent(cookieName)}=${encodeURIComponent(newValue ?? defaultValue ?? '')}`;
|
|
16
|
+
doc.cookie = cookieString;
|
|
17
|
+
}, [cookieName, doc]);
|
|
18
|
+
const rc = useCallback(() => {
|
|
19
|
+
if (!doc)
|
|
20
|
+
return;
|
|
21
|
+
const cookieString = `${encodeURIComponent(cookieName)}=`;
|
|
22
|
+
doc.cookie = cookieString;
|
|
23
|
+
}, [cookieName, doc]);
|
|
24
|
+
return [cv, sc, rc];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Try fetching the DOM Document, returning null if the current DOM Document
|
|
28
|
+
* cannot be found (e.g. server side)
|
|
29
|
+
*
|
|
30
|
+
* @returns The Document or undefined when on server side
|
|
31
|
+
*/
|
|
32
|
+
export const useDocument = () => {
|
|
33
|
+
try {
|
|
34
|
+
return window.document;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=useCookie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCookie.js","sourceRoot":"","sources":["../../src/components/useCookie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE5C,MAAM,UAAU,SAAS,CAA+B,UAAkB,EAAE,YAAgB;IAMxF,MAAM,GAAG,GAAG,WAAW,EAAE,CAAA;IACzB,MAAM,EAAE,GAAG,OAAO,CAAiD,GAAG,EAAE;QACpE,IAAI,CAAC,GAAG;YACJ,OAAO,YAA8D,CAAA;QACzE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAA2B,CAAA;QACnI,MAAM,MAAM,GAA+B,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACxF,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAmD,CAAA;QACjH,OAAO,GAAG,CAAA;IACd,CAAC,EAAE,CAAE,UAAU,EAAE,YAAY,EAAE,GAAG,CAAE,CAAC,CAAA;IAErC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,QAAwD,EAAE,EAAE;QAChF,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,MAAM,YAAY,GAAG,GAAI,kBAAkB,CAAC,UAAU,CAAE,IAAK,kBAAkB,CAAC,QAAQ,IAAI,YAAY,IAAI,EAAE,CAAC,EAAE,CAAA;QACjH,GAAG,CAAC,MAAM,GAAG,YAAY,CAAA;IAC7B,CAAC,EAAE,CAAE,UAAU,EAAE,GAAG,CAAE,CAAC,CAAA;IAEvB,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QACxB,IAAI,CAAC,GAAG;YAAE,OAAM;QAChB,MAAM,YAAY,GAAG,GAAI,kBAAkB,CAAC,UAAU,CAAE,GAAG,CAAA;QAC3D,GAAG,CAAC,MAAM,GAAG,YAAY,CAAA;IAC7B,CAAC,EAAE,CAAE,UAAU,EAAE,GAAG,CAAE,CAAC,CAAA;IAEvB,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAE5B,IAAI,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAA;IACpB,CAAC;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
export const useQueryParam = (paramName, defaultValue) => {
|
|
3
|
+
const value = getQueryParam(paramName, defaultValue);
|
|
4
|
+
const remove = useCallback(() => {
|
|
5
|
+
return removeQueryParam(paramName);
|
|
6
|
+
}, [paramName]);
|
|
7
|
+
const set = useCallback((newValue) => {
|
|
8
|
+
return setQueryParam(paramName, newValue);
|
|
9
|
+
}, [paramName]);
|
|
10
|
+
};
|
|
11
|
+
function setQueryParam(key, newValue) {
|
|
12
|
+
}
|
|
13
|
+
function removeQueryParam(key) {
|
|
14
|
+
}
|
|
15
|
+
function getQueryParam(key, defaultValue) {
|
|
16
|
+
return getQueryParams().get(key) ?? defaultValue;
|
|
17
|
+
}
|
|
18
|
+
function getQueryParams() {
|
|
19
|
+
try {
|
|
20
|
+
const { search } = window.location;
|
|
21
|
+
return new URLSearchParams(search);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return new URLSearchParams();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export default useQueryParam;
|
|
28
|
+
//# sourceMappingURL=useQueryParam.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQueryParam.js","sourceRoot":"","sources":["../../src/components/useQueryParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAW,MAAM,OAAO,CAAA;AAG5C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAE,YAAqB,EAAE,EAAE;IAEtE,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC,EAAE,CAAE,SAAS,CAAE,CAAC,CAAA;IACjB,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,QAAgB,EAAE,EAAE;QACzC,OAAO,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IAC7C,CAAC,EAAE,CAAE,SAAS,CAAE,CAAC,CAAA;AACrB,CAAC,CAAA;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,QAAgB;AAEpD,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;AAErC,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,YAAqB;IACrD,OAAO,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAA;AACpD,CAAC;AAED,SAAS,cAAc;IAEnB,IAAI,CAAC;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAA;QAClC,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,eAAe,EAAE,CAAA;IAChC,CAAC;AACL,CAAC;AAED,eAAe,aAAa,CAAA"}
|
package/dist/env-vars.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export declare const enum EnvVars {
|
|
|
8
8
|
ContentRecsDeliveryKey = "OPTIMIZELY_CONTENTRECS_DELIVERY_KEY",
|
|
9
9
|
ContentRecsHost = "OPTIMIZELY_CONTENTRECS_API",
|
|
10
10
|
FrontendCookie = "OPTIMIZELY_FRONTEND_COOKIE",
|
|
11
|
-
WebExperimentationProject = "OPTIMIZELY_WEB_EXPERIMENTATION_PROJECT"
|
|
11
|
+
WebExperimentationProject = "OPTIMIZELY_WEB_EXPERIMENTATION_PROJECT",
|
|
12
|
+
OptimizelyDebug = "OPTIMIZELY_DEBUG"
|
|
12
13
|
}
|
|
13
14
|
export default EnvVars;
|
package/dist/env-vars.js
CHANGED
|
@@ -10,6 +10,7 @@ export var EnvVars;
|
|
|
10
10
|
EnvVars["ContentRecsHost"] = "OPTIMIZELY_CONTENTRECS_API";
|
|
11
11
|
EnvVars["FrontendCookie"] = "OPTIMIZELY_FRONTEND_COOKIE";
|
|
12
12
|
EnvVars["WebExperimentationProject"] = "OPTIMIZELY_WEB_EXPERIMENTATION_PROJECT";
|
|
13
|
+
EnvVars["OptimizelyDebug"] = "OPTIMIZELY_DEBUG";
|
|
13
14
|
})(EnvVars || (EnvVars = {}));
|
|
14
15
|
export default EnvVars;
|
|
15
16
|
//# sourceMappingURL=env-vars.js.map
|
package/dist/env-vars.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-vars.js","sourceRoot":"","sources":["../src/env-vars.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAkB,
|
|
1
|
+
{"version":3,"file":"env-vars.js","sourceRoot":"","sources":["../src/env-vars.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAkB,OAYjB;AAZD,WAAkB,OAAO;IACrB,mDAAwC,CAAA;IACxC,0DAA+C,CAAA;IAC/C,sEAA2D,CAAA;IAC3D,kDAAuC,CAAA;IACvC,8DAAmD,CAAA;IACnD,kEAAuD,CAAA;IACvD,yEAA8D,CAAA;IAC9D,yDAA8C,CAAA;IAC9C,wDAA6C,CAAA;IAC7C,+EAAoE,CAAA;IACpE,+CAAoC,CAAA;AACxC,CAAC,EAZiB,OAAO,KAAP,OAAO,QAYxB;AACD,eAAe,OAAO,CAAA"}
|
|
@@ -7,6 +7,7 @@ import ExpScript from './snippets/optimizely-web-experimentation';
|
|
|
7
7
|
export default function (props) {
|
|
8
8
|
const odp_id = props.dataPlatformTrackerId || EnvTools.readValue(EnvVars.OdpApiKey);
|
|
9
9
|
const exp_id = props.experimentationProjectId || EnvTools.readValue(EnvVars.WebExperimentationProject);
|
|
10
|
-
|
|
10
|
+
const useOptiOneHelper = EnvTools.readValueAsBoolean(EnvVars.HelperEnabled, false);
|
|
11
|
+
return _jsxs(_Fragment, { children: [odp_id && _jsx(OdpScript, { trackerId: odp_id }), exp_id && _jsx(ExpScript, { projectId: exp_id, useApiProxy: useOptiOneHelper })] });
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/server-components/scripts/header.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AACtC,OAAO,OAAO,MAAM,gBAAgB,CAAA;AACpC,OAAO,SAAS,MAAM,oCAAoC,CAAA;AAC1D,OAAO,SAAS,MAAM,2CAA2C,CAAA;AAOjE,MAAM,CAAC,OAAO,WAAW,KAAyB;IAE9C,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACnF,MAAM,MAAM,GAAG,KAAK,CAAC,wBAAwB,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACtG,OAAO,8BACD,MAAM,IAAI,KAAC,SAAS,IAAC,SAAS,EAAG,MAAM,GAAK,EAC5C,MAAM,IAAI,KAAC,SAAS,IAAC,SAAS,EAAG,MAAM,GAAK,
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/server-components/scripts/header.tsx"],"names":[],"mappings":";AAAA,OAAO,aAAa,CAAA;AACpB,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AACtC,OAAO,OAAO,MAAM,gBAAgB,CAAA;AACpC,OAAO,SAAS,MAAM,oCAAoC,CAAA;AAC1D,OAAO,SAAS,MAAM,2CAA2C,CAAA;AAOjE,MAAM,CAAC,OAAO,WAAW,KAAyB;IAE9C,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACnF,MAAM,MAAM,GAAG,KAAK,CAAC,wBAAwB,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;IACtG,MAAM,gBAAgB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IAClF,OAAO,8BACD,MAAM,IAAI,KAAC,SAAS,IAAC,SAAS,EAAG,MAAM,GAAK,EAC5C,MAAM,IAAI,KAAC,SAAS,IAAC,SAAS,EAAG,MAAM,EAAG,WAAW,EAAG,gBAAgB,GAAK,IAChF,CAAA;AACP,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export type OptimizelyWebExperimentationProps = {
|
|
2
2
|
projectId: string | number;
|
|
3
|
+
useApiProxy?: boolean;
|
|
4
|
+
apiPrefix?: string;
|
|
3
5
|
};
|
|
4
|
-
export declare const OptimizelyWebExperimentationScript: (
|
|
6
|
+
export declare const OptimizelyWebExperimentationScript: ({ projectId, apiPrefix, useApiProxy }: OptimizelyWebExperimentationProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
7
|
export default OptimizelyWebExperimentationScript;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/* eslint @next/next/no-before-interactive-script-outside-document: 0 */
|
|
3
3
|
import Script from 'next/script';
|
|
4
|
-
export const OptimizelyWebExperimentationScript = (
|
|
5
|
-
const
|
|
6
|
-
return _jsxs(_Fragment, { children: [_jsx(Script, { id: 'web-experimentation-startup', strategy: 'beforeInteractive', children: `window["optimizely"] = window["optimizely"] || [];` }), _jsx(Script, { id: 'web-experimentation-project', strategy: 'beforeInteractive', src:
|
|
4
|
+
export const OptimizelyWebExperimentationScript = ({ projectId, apiPrefix = "/api/me", useApiProxy = false }) => {
|
|
5
|
+
const scriptSrc = useApiProxy ? `${apiPrefix}/exp` : `https://cdn.optimizely.com/js/${projectId}.js`;
|
|
6
|
+
return _jsxs(_Fragment, { children: [_jsx(Script, { id: 'web-experimentation-startup', strategy: 'beforeInteractive', children: `window["optimizely"] = window["optimizely"] || [];` }), _jsx(Script, { id: 'web-experimentation-project', strategy: 'beforeInteractive', src: scriptSrc })] });
|
|
7
7
|
};
|
|
8
8
|
export default OptimizelyWebExperimentationScript;
|
|
9
9
|
//# sourceMappingURL=optimizely-web-experimentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimizely-web-experimentation.js","sourceRoot":"","sources":["../../../../src/server-components/scripts/snippets/optimizely-web-experimentation.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,OAAO,MAAM,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"optimizely-web-experimentation.js","sourceRoot":"","sources":["../../../../src/server-components/scripts/snippets/optimizely-web-experimentation.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,OAAO,MAAM,MAAM,aAAa,CAAA;AAQhC,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,WAAW,GAAG,KAAK,EAAqC,EAAE,EAAE;IAE/I,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAI,SAAU,MAAM,CAAC,CAAC,CAAC,iCAAkC,SAAU,KAAK,CAAA;IACxG,OAAO,8BACH,KAAC,MAAM,IAAC,EAAE,EAAC,6BAA6B,EAAC,QAAQ,EAAC,mBAAmB,YAAG,oDAAoD,GAAU,EACtI,KAAC,MAAM,IAAC,EAAE,EAAC,6BAA6B,EAAC,QAAQ,EAAC,mBAAmB,EAAC,GAAG,EAAG,SAAS,GAAK,IAC3F,CAAA;AACP,CAAC,CAAA;AAED,eAAe,kCAAkC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remkoj/optimizely-one-nextjs",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "2.0.0-
|
|
4
|
+
"version": "2.0.0-pre4",
|
|
5
5
|
"packageManager": "yarn@4.1.1",
|
|
6
6
|
"repository": "https://github.com/remkoj/optimizely-dxp-clients.git",
|
|
7
7
|
"author": "Remko Jantzen <693172+remkoj@users.noreply.github.com>",
|
|
@@ -40,14 +40,15 @@
|
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@headlessui/react": "^2.0.
|
|
43
|
+
"@headlessui/react": "^2.0.4",
|
|
44
44
|
"@headlessui/tailwindcss": "^0.2.0",
|
|
45
45
|
"@heroicons/react": "^2.1.3",
|
|
46
|
-
"@remkoj/optimizely-graph-client": "^2.0.0-
|
|
47
|
-
"@types/node": "^20.12.
|
|
48
|
-
"@types/react": "^18.3.
|
|
46
|
+
"@remkoj/optimizely-graph-client": "^2.0.0-pre4",
|
|
47
|
+
"@types/node": "^20.12.12",
|
|
48
|
+
"@types/react": "^18.3.3",
|
|
49
49
|
"@types/react-dom": "18.3.0",
|
|
50
50
|
"@types/uuid": "^9.0.8",
|
|
51
|
+
"browserslist": "^4.23.0",
|
|
51
52
|
"next": "^14.2.3",
|
|
52
53
|
"prop-types": "^15.8.1",
|
|
53
54
|
"react": "^18.3.1",
|
|
@@ -56,12 +57,13 @@
|
|
|
56
57
|
"swr": "^2.2.5",
|
|
57
58
|
"tailwindcss": "^3.4.3",
|
|
58
59
|
"typescript": "^5.4.5",
|
|
60
|
+
"update-browserslist-db": "^1.0.16",
|
|
59
61
|
"uuid": "^9.0.1"
|
|
60
62
|
},
|
|
61
63
|
"peerDependencies": {
|
|
62
64
|
"@headlessui/react": "*",
|
|
63
65
|
"@heroicons/react": "*",
|
|
64
|
-
"@remkoj/optimizely-graph-client": "^2.0.0-
|
|
66
|
+
"@remkoj/optimizely-graph-client": "^2.0.0-pre4",
|
|
65
67
|
"next": "*",
|
|
66
68
|
"react": "*",
|
|
67
69
|
"react-dom": "*",
|