
* Add template Cleanup Update queries Basic mailchimp client Add Oauth flow remove next auth * Auth flow, mailchimp button * Basic layouts * session saver for appbridge * ideas drop * basic iframe flow * iframe flow - with post message * saving token in backend * saving token in backend * Extracted settings manager * Refactor audience router * Remove old macaw ui * Nav and layout * display lists and wip add customer * Metadata updater * Allow iframe to NOT have app layout * Add segment coming soon * App layout * Add removing config button * Add iframe * Fix postmessages * Display lists * webhook settings * Connect webhook * remove comment * batch customer adding client * Update macaw * Fetching customers component * Add bulk sync * add temp ts-ignore until macaw is fixed * Improve ui * redesign * Extract sections * Redesign mailchimp login * Refactor sections * Extract mailchimp list picker * Add name mapping * WIP tags, extracted colocated queries to folders * Wip - not working CustomerUpdated subs * Add instructions * Fix webhook config state * Add external links * envs * Protected Oauth handler * Fix instructions * Squash some todos * Instructions update with gql * empty trygger * Add env validation * Fix error message * Update macaw and remove todos * Add metadata manager test * Replace Mailchimp enum to lowercase * Update oauth routes * Fix typo * Add loader to removing config box * Update labeler to include CRM app * Apply suggestions from CR * Fix linter
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import { useAppBridge } from "@saleor/app-sdk/app-bridge";
|
|
import { useEffect, useRef } from "react";
|
|
|
|
export type AppBridgeStorageState = {
|
|
token: string;
|
|
saleorApiUrl: string;
|
|
};
|
|
|
|
const storageKey = "app-bridge-state";
|
|
|
|
/**
|
|
* Saves token and API url to pass them to the iframe
|
|
*/
|
|
export const AppBridgePersistence = {
|
|
set(requiredState: AppBridgeStorageState) {
|
|
window.sessionStorage.setItem(storageKey, JSON.stringify(requiredState));
|
|
},
|
|
get(): AppBridgeStorageState | null {
|
|
const storageItem = window.sessionStorage.getItem(storageKey);
|
|
|
|
if (!storageItem) {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
return JSON.parse(storageItem as string);
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Set cookie automatically each time AppBridge received token and API URL
|
|
*/
|
|
export const AppBridgeStorageSetter = () => {
|
|
const { appBridgeState } = useAppBridge();
|
|
|
|
useEffect(() => {
|
|
if (appBridgeState?.saleorApiUrl && appBridgeState?.token) {
|
|
AppBridgePersistence.set({
|
|
token: appBridgeState.token,
|
|
saleorApiUrl: appBridgeState.saleorApiUrl,
|
|
});
|
|
}
|
|
}, [appBridgeState?.saleorApiUrl, appBridgeState?.token]);
|
|
|
|
return null;
|
|
};
|
|
|
|
export const useAppBridgePersistence = () => {
|
|
const value = useRef(AppBridgePersistence.get());
|
|
|
|
return value.current;
|
|
};
|