saleor-apps-redis_apl/apps/crm/src/lib/app-bridge-persistence.ts
Lukasz Ostrowski 3acc1553a8
Introduce CRM App (#292)
* 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
2023-04-06 09:26:56 +02:00

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;
};