@cloudscape-design/components-themeable 3.0.1245 → 3.0.1246
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/lib/internal/manifest.json +1 -1
- package/lib/internal/scss/internal/generated/custom-css-properties/index.scss +1 -1
- package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-feature-notifications.d.ts.map +1 -1
- package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-feature-notifications.js +17 -1
- package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-feature-notifications.js.map +1 -1
- package/lib/internal/template/internal/base-component/styles.scoped.css +1 -1
- package/lib/internal/template/internal/environment.js +2 -2
- package/lib/internal/template/internal/environment.json +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-feature-notifications.d.ts","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/state/use-feature-notifications.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAOpE,OAAO,EAIL,aAAa,EACd,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD,UAAU,8BAA8B;IACtC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;CACpC;AACD,MAAM,WAAW,yBAAyB;IACxC,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;CACvC;AACD,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,8BAA8B,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AA+BtG,wBAAgB,uBAAuB;;;gDAgDc,aAAa;
|
|
1
|
+
{"version":3,"file":"use-feature-notifications.d.ts","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/state/use-feature-notifications.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAA6B,MAAM,OAAO,CAAC;AAOpE,OAAO,EAIL,aAAa,EACd,MAAM,6CAA6C,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD,UAAU,8BAA8B;IACtC,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;CACpC;AACD,MAAM,WAAW,yBAAyB;IACxC,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;CACvC;AACD,MAAM,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,8BAA8B,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AA+BtG,wBAAgB,uBAAuB;;;gDAgDc,aAAa;EA0IjE"}
|
package/lib/internal/template/app-layout/visual-refresh-toolbar/state/use-feature-notifications.js
CHANGED
|
@@ -82,10 +82,14 @@ export function useFeatureNotifications() {
|
|
|
82
82
|
// Retrieve previously seen feature notifications from persistence to determine
|
|
83
83
|
// which features the user has already viewed
|
|
84
84
|
((payload === null || payload === void 0 ? void 0 : payload.__retrieveFeatureNotifications) || retrieveFeatureNotifications)(persistenceConfig).then(seenFeatureNotifications => {
|
|
85
|
+
var _a;
|
|
85
86
|
setSeenFeatures(seenFeatureNotifications);
|
|
86
87
|
const hasUnseenFeatures = features.some(feature => !seenFeatureNotifications[feature.id]);
|
|
87
88
|
if (hasUnseenFeatures) {
|
|
88
|
-
|
|
89
|
+
const latestFeature = (_a = features.find(feature => !seenFeatureNotifications[feature.id])) !== null && _a !== void 0 ? _a : null;
|
|
90
|
+
if (!payload.suppressFeaturePrompt &&
|
|
91
|
+
!featurePromptDismissed &&
|
|
92
|
+
!seenFeatureNotifications[getFeaturePromptPersistenceId(latestFeature)]) {
|
|
89
93
|
featurePromptMountPromise.then(() => {
|
|
90
94
|
var _a;
|
|
91
95
|
(_a = featurePromptRef.current) === null || _a === void 0 ? void 0 : _a.show();
|
|
@@ -128,6 +132,7 @@ export function useFeatureNotifications() {
|
|
|
128
132
|
triggerRef.current.dataset.awsuiSuppressTooltip = 'false';
|
|
129
133
|
}
|
|
130
134
|
});
|
|
135
|
+
persistFeaturePromptDismiss(latestFeature);
|
|
131
136
|
}, header: React.createElement(RuntimeContentPart, { mountContent: featureNotificationsData === null || featureNotificationsData === void 0 ? void 0 : featureNotificationsData.mountItem, content: latestFeature.header }), content: React.createElement(RuntimeContentPart, { mountContent: featureNotificationsData === null || featureNotificationsData === void 0 ? void 0 : featureNotificationsData.mountItem, content: latestFeature.content }), trackKey: latestFeature.id, position: "left", getTrack: () => triggerRef.current }));
|
|
132
137
|
}
|
|
133
138
|
const setFeaturesToSeenAndPersist = () => {
|
|
@@ -146,6 +151,17 @@ export function useFeatureNotifications() {
|
|
|
146
151
|
setFeatureNotificationsData(data => (data ? { ...data, badge: false } : data));
|
|
147
152
|
});
|
|
148
153
|
};
|
|
154
|
+
const getFeaturePromptPersistenceId = (feature) => `${feature === null || feature === void 0 ? void 0 : feature.id}_feature-prompt`;
|
|
155
|
+
const persistFeaturePromptDismiss = (feature) => {
|
|
156
|
+
var _a, _b, _c;
|
|
157
|
+
const persistenceConfig = (_a = featureNotificationsData === null || featureNotificationsData === void 0 ? void 0 : featureNotificationsData.persistenceConfig) !== null && _a !== void 0 ? _a : DEFAULT_PERSISTENCE_CONFIG;
|
|
158
|
+
const featuresMap = { [getFeaturePromptPersistenceId(feature)]: (_b = feature.releaseDate) === null || _b === void 0 ? void 0 : _b.toString() };
|
|
159
|
+
const filteredSeenFeaturesMap = filterOutdatedFeatures(seenFeatures);
|
|
160
|
+
const allFeaturesMap = { ...featuresMap, ...filteredSeenFeaturesMap };
|
|
161
|
+
((_c = featureNotificationsData === null || featureNotificationsData === void 0 ? void 0 : featureNotificationsData.__persistFeatureNotifications) !== null && _c !== void 0 ? _c : persistFeatureNotifications)(persistenceConfig, allFeaturesMap).then(() => {
|
|
162
|
+
setSeenFeatures(allFeaturesMap);
|
|
163
|
+
});
|
|
164
|
+
};
|
|
149
165
|
const onOpenFeatureNotificationsDrawer = () => {
|
|
150
166
|
if (!featureNotificationsData || allNotificationsSeen) {
|
|
151
167
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-feature-notifications.js","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/state/use-feature-notifications.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { RefObject, useMemo, useRef, useState } from 'react';\n\nimport { useMergeRefs } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useInternalI18n } from '../../../i18n/context';\nimport FeaturePrompt, { FeaturePromptProps } from '../../../internal/do-not-use/feature-prompt';\nimport { persistFeatureNotifications, retrieveFeatureNotifications } from '../../../internal/persistence';\nimport {\n Feature,\n FeatureNotificationsPayload,\n PersistedFeaturesDict,\n WidgetMessage,\n} from '../../../internal/plugins/widget/interfaces';\nimport { useMountRefPromise } from '../../../internal/utils/promises';\nimport { AppLayoutProps } from '../../interfaces';\nimport RuntimeFeaturesNotificationDrawer, { RuntimeContentPart } from '../drawer/feature-notifications-drawer-content';\n\nconst DEFAULT_PERSISTENCE_CONFIG = {\n uniqueKey: 'awsui-feature-notifications',\n};\n\ninterface RenderLatestFeaturePromptProps {\n triggerRef: RefObject<HTMLElement>;\n}\nexport interface FeatureNotificationsProps {\n renderLatestFeaturePrompt: RenderLatestFeaturePrompt;\n drawer?: AppLayoutProps.Drawer | null;\n}\nexport type RenderLatestFeaturePrompt = (props: RenderLatestFeaturePromptProps) => JSX.Element | null;\ninterface FeatureNotifications extends FeatureNotificationsPayload<unknown> {\n badge?: boolean;\n}\n\nconst FEATURE_NOTIFICATIONS_RETENTION_DAYS = 180;\nconst DEFAULT_FEATURE_FILTER_DAYS = 90;\n\nfunction subtractDaysFromDate(currentDate: Date, daysToSubtract: number = 0): Date {\n const pastDate = new Date(currentDate);\n pastDate.setDate(pastDate.getDate() - daysToSubtract);\n return pastDate;\n}\n\nfunction filterOutdatedFeatures(features: PersistedFeaturesDict): PersistedFeaturesDict {\n const cutoffDate = subtractDaysFromDate(new Date(), FEATURE_NOTIFICATIONS_RETENTION_DAYS);\n\n return Object.keys(features).reduce((acc, key) => {\n const featureDate = new Date(features[key]);\n\n if (featureDate && featureDate >= cutoffDate) {\n return {\n ...acc,\n [key]: features[key],\n };\n }\n\n return acc;\n }, {});\n}\n\nexport function useFeatureNotifications() {\n const i18n = useInternalI18n('features-notification-drawer');\n const [featurePromptDismissed, setFeaturePromptDismissed] = useState(false);\n const [featureNotificationsData, setFeatureNotificationsData] = useState<FeatureNotifications | null>(null);\n const [seenFeatures, setSeenFeatures] = useState<PersistedFeaturesDict>({});\n const featurePromptRef = useRef<FeaturePromptProps.Ref>(null);\n const { ref: featurePromptMountRef, promise: featurePromptMountPromise } = useMountRefPromise();\n const featurePromptMergedRef = useMergeRefs(featurePromptRef, featurePromptMountRef);\n const allNotificationsSeen = useMemo(() => {\n return featureNotificationsData?.features.every(feature => !!seenFeatures[feature.id]);\n }, [featureNotificationsData, seenFeatures]);\n\n const defaultFeaturesFilter = (feature: Feature<unknown>) => {\n return feature.releaseDate >= subtractDaysFromDate(new Date(), DEFAULT_FEATURE_FILTER_DAYS);\n };\n\n const getFeaturesToDisplay = (payload: FeatureNotificationsPayload<unknown>): Array<Feature<unknown>> => {\n return payload.features\n .slice()\n .filter(payload.filterFeatures ? payload.filterFeatures : defaultFeaturesFilter)\n .sort((a, b) => b.releaseDate.getTime() - a.releaseDate.getTime());\n };\n\n const mapPayloadToDrawer = (payload: FeatureNotifications): AppLayoutProps.Drawer => {\n return {\n id: payload.id,\n content: (\n <RuntimeFeaturesNotificationDrawer\n features={payload.features}\n featuresPageLink={payload.featuresPageLink}\n mountItem={payload.mountItem}\n />\n ),\n trigger: {\n iconName: 'suggestions',\n },\n ariaLabels: {\n closeButton: i18n('ariaLabels.closeButton', undefined),\n drawerName: i18n('ariaLabels.content', undefined) ?? '',\n triggerButton: i18n('ariaLabels.triggerButton', undefined),\n resizeHandle: i18n('ariaLabels.resizeHandle', undefined),\n },\n resizable: true,\n defaultSize: 320,\n badge: payload.badge,\n };\n };\n\n function featureNotificationsMessageHandler(event: WidgetMessage) {\n if (event.type === 'registerFeatureNotifications') {\n const { payload } = event;\n const features = getFeaturesToDisplay(payload);\n if (features.length === 0) {\n return;\n }\n\n setFeatureNotificationsData({ ...payload, features });\n\n const persistenceConfig = payload.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n // Retrieve previously seen feature notifications from persistence to determine\n // which features the user has already viewed\n (payload?.__retrieveFeatureNotifications || retrieveFeatureNotifications)(persistenceConfig).then(\n seenFeatureNotifications => {\n setSeenFeatures(seenFeatureNotifications);\n const hasUnseenFeatures = features.some(feature => !seenFeatureNotifications[feature.id]);\n if (hasUnseenFeatures) {\n if (!payload.suppressFeaturePrompt && !featurePromptDismissed) {\n featurePromptMountPromise.then(() => {\n featurePromptRef.current?.show();\n });\n }\n setFeatureNotificationsData(data => (data ? { ...data, badge: true } : data));\n }\n }\n );\n return;\n }\n\n if (event.type === 'showFeaturePromptIfPossible' && !allNotificationsSeen) {\n featurePromptRef.current?.show();\n return;\n }\n\n if (event.type === 'clearFeatureNotifications') {\n setFeatureNotificationsData(null);\n return;\n }\n }\n\n function getLatestUnseenFeature() {\n return featureNotificationsData?.features.find(feature => !seenFeatures[feature.id]) ?? null;\n }\n\n function renderLatestFeaturePrompt({ triggerRef }: RenderLatestFeaturePromptProps) {\n const latestFeature = getLatestUnseenFeature();\n if (!triggerRef.current || !latestFeature) {\n return null;\n }\n return (\n <FeaturePrompt\n ref={featurePromptMergedRef}\n onShow={() => {\n triggerRef.current!.dataset!.awsuiSuppressTooltip = 'true';\n }}\n onDismiss={event => {\n if (event.detail?.method !== 'blur') {\n triggerRef?.current!.focus();\n }\n setFeaturePromptDismissed(true);\n Promise.resolve().then(() => {\n if (triggerRef.current?.dataset) {\n triggerRef.current!.dataset!.awsuiSuppressTooltip = 'false';\n }\n });\n }}\n header={\n <RuntimeContentPart mountContent={featureNotificationsData?.mountItem} content={latestFeature.header} />\n }\n content={\n <RuntimeContentPart mountContent={featureNotificationsData?.mountItem} content={latestFeature.content} />\n }\n trackKey={latestFeature.id}\n position=\"left\"\n getTrack={() => triggerRef.current}\n />\n );\n }\n\n const setFeaturesToSeenAndPersist = () => {\n const persistenceConfig = featureNotificationsData?.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n const featuresMap = featureNotificationsData?.features.reduce((acc, feature) => {\n return {\n ...acc,\n [feature.id]: feature.releaseDate,\n };\n }, {});\n const filteredSeenFeaturesMap = filterOutdatedFeatures(seenFeatures);\n const allFeaturesMap = { ...featuresMap, ...filteredSeenFeaturesMap };\n (featureNotificationsData?.__persistFeatureNotifications ?? persistFeatureNotifications)(\n persistenceConfig,\n allFeaturesMap\n ).then(() => {\n setSeenFeatures(allFeaturesMap);\n setFeatureNotificationsData(data => (data ? { ...data, badge: false } : data));\n });\n };\n\n const onOpenFeatureNotificationsDrawer = () => {\n if (!featureNotificationsData || allNotificationsSeen) {\n return;\n }\n\n setFeaturesToSeenAndPersist();\n };\n\n const featureNotificationsProps: FeatureNotificationsProps = {\n renderLatestFeaturePrompt,\n drawer: featureNotificationsData && mapPayloadToDrawer(featureNotificationsData),\n };\n\n return {\n featureNotificationsProps,\n onOpenFeatureNotificationsDrawer,\n featureNotificationsMessageHandler,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"use-feature-notifications.js","sourceRoot":"","sources":["../../../../../src/app-layout/visual-refresh-toolbar/state/use-feature-notifications.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { RefObject, useMemo, useRef, useState } from 'react';\n\nimport { useMergeRefs } from '@cloudscape-design/component-toolkit/internal';\n\nimport { useInternalI18n } from '../../../i18n/context';\nimport FeaturePrompt, { FeaturePromptProps } from '../../../internal/do-not-use/feature-prompt';\nimport { persistFeatureNotifications, retrieveFeatureNotifications } from '../../../internal/persistence';\nimport {\n Feature,\n FeatureNotificationsPayload,\n PersistedFeaturesDict,\n WidgetMessage,\n} from '../../../internal/plugins/widget/interfaces';\nimport { useMountRefPromise } from '../../../internal/utils/promises';\nimport { AppLayoutProps } from '../../interfaces';\nimport RuntimeFeaturesNotificationDrawer, { RuntimeContentPart } from '../drawer/feature-notifications-drawer-content';\n\nconst DEFAULT_PERSISTENCE_CONFIG = {\n uniqueKey: 'awsui-feature-notifications',\n};\n\ninterface RenderLatestFeaturePromptProps {\n triggerRef: RefObject<HTMLElement>;\n}\nexport interface FeatureNotificationsProps {\n renderLatestFeaturePrompt: RenderLatestFeaturePrompt;\n drawer?: AppLayoutProps.Drawer | null;\n}\nexport type RenderLatestFeaturePrompt = (props: RenderLatestFeaturePromptProps) => JSX.Element | null;\ninterface FeatureNotifications extends FeatureNotificationsPayload<unknown> {\n badge?: boolean;\n}\n\nconst FEATURE_NOTIFICATIONS_RETENTION_DAYS = 180;\nconst DEFAULT_FEATURE_FILTER_DAYS = 90;\n\nfunction subtractDaysFromDate(currentDate: Date, daysToSubtract: number = 0): Date {\n const pastDate = new Date(currentDate);\n pastDate.setDate(pastDate.getDate() - daysToSubtract);\n return pastDate;\n}\n\nfunction filterOutdatedFeatures(features: PersistedFeaturesDict): PersistedFeaturesDict {\n const cutoffDate = subtractDaysFromDate(new Date(), FEATURE_NOTIFICATIONS_RETENTION_DAYS);\n\n return Object.keys(features).reduce((acc, key) => {\n const featureDate = new Date(features[key]);\n\n if (featureDate && featureDate >= cutoffDate) {\n return {\n ...acc,\n [key]: features[key],\n };\n }\n\n return acc;\n }, {});\n}\n\nexport function useFeatureNotifications() {\n const i18n = useInternalI18n('features-notification-drawer');\n const [featurePromptDismissed, setFeaturePromptDismissed] = useState(false);\n const [featureNotificationsData, setFeatureNotificationsData] = useState<FeatureNotifications | null>(null);\n const [seenFeatures, setSeenFeatures] = useState<PersistedFeaturesDict>({});\n const featurePromptRef = useRef<FeaturePromptProps.Ref>(null);\n const { ref: featurePromptMountRef, promise: featurePromptMountPromise } = useMountRefPromise();\n const featurePromptMergedRef = useMergeRefs(featurePromptRef, featurePromptMountRef);\n const allNotificationsSeen = useMemo(() => {\n return featureNotificationsData?.features.every(feature => !!seenFeatures[feature.id]);\n }, [featureNotificationsData, seenFeatures]);\n\n const defaultFeaturesFilter = (feature: Feature<unknown>) => {\n return feature.releaseDate >= subtractDaysFromDate(new Date(), DEFAULT_FEATURE_FILTER_DAYS);\n };\n\n const getFeaturesToDisplay = (payload: FeatureNotificationsPayload<unknown>): Array<Feature<unknown>> => {\n return payload.features\n .slice()\n .filter(payload.filterFeatures ? payload.filterFeatures : defaultFeaturesFilter)\n .sort((a, b) => b.releaseDate.getTime() - a.releaseDate.getTime());\n };\n\n const mapPayloadToDrawer = (payload: FeatureNotifications): AppLayoutProps.Drawer => {\n return {\n id: payload.id,\n content: (\n <RuntimeFeaturesNotificationDrawer\n features={payload.features}\n featuresPageLink={payload.featuresPageLink}\n mountItem={payload.mountItem}\n />\n ),\n trigger: {\n iconName: 'suggestions',\n },\n ariaLabels: {\n closeButton: i18n('ariaLabels.closeButton', undefined),\n drawerName: i18n('ariaLabels.content', undefined) ?? '',\n triggerButton: i18n('ariaLabels.triggerButton', undefined),\n resizeHandle: i18n('ariaLabels.resizeHandle', undefined),\n },\n resizable: true,\n defaultSize: 320,\n badge: payload.badge,\n };\n };\n\n function featureNotificationsMessageHandler(event: WidgetMessage) {\n if (event.type === 'registerFeatureNotifications') {\n const { payload } = event;\n const features = getFeaturesToDisplay(payload);\n if (features.length === 0) {\n return;\n }\n\n setFeatureNotificationsData({ ...payload, features });\n\n const persistenceConfig = payload.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n // Retrieve previously seen feature notifications from persistence to determine\n // which features the user has already viewed\n (payload?.__retrieveFeatureNotifications || retrieveFeatureNotifications)(persistenceConfig).then(\n seenFeatureNotifications => {\n setSeenFeatures(seenFeatureNotifications);\n const hasUnseenFeatures = features.some(feature => !seenFeatureNotifications[feature.id]);\n if (hasUnseenFeatures) {\n const latestFeature = features.find(feature => !seenFeatureNotifications[feature.id]) ?? null;\n if (\n !payload.suppressFeaturePrompt &&\n !featurePromptDismissed &&\n !seenFeatureNotifications[getFeaturePromptPersistenceId(latestFeature)]\n ) {\n featurePromptMountPromise.then(() => {\n featurePromptRef.current?.show();\n });\n }\n setFeatureNotificationsData(data => (data ? { ...data, badge: true } : data));\n }\n }\n );\n return;\n }\n\n if (event.type === 'showFeaturePromptIfPossible' && !allNotificationsSeen) {\n featurePromptRef.current?.show();\n return;\n }\n\n if (event.type === 'clearFeatureNotifications') {\n setFeatureNotificationsData(null);\n return;\n }\n }\n\n function getLatestUnseenFeature() {\n return featureNotificationsData?.features.find(feature => !seenFeatures[feature.id]) ?? null;\n }\n\n function renderLatestFeaturePrompt({ triggerRef }: RenderLatestFeaturePromptProps) {\n const latestFeature = getLatestUnseenFeature();\n if (!triggerRef.current || !latestFeature) {\n return null;\n }\n return (\n <FeaturePrompt\n ref={featurePromptMergedRef}\n onShow={() => {\n triggerRef.current!.dataset!.awsuiSuppressTooltip = 'true';\n }}\n onDismiss={event => {\n if (event.detail?.method !== 'blur') {\n triggerRef?.current!.focus();\n }\n setFeaturePromptDismissed(true);\n Promise.resolve().then(() => {\n if (triggerRef.current?.dataset) {\n triggerRef.current!.dataset!.awsuiSuppressTooltip = 'false';\n }\n });\n persistFeaturePromptDismiss(latestFeature);\n }}\n header={\n <RuntimeContentPart mountContent={featureNotificationsData?.mountItem} content={latestFeature.header} />\n }\n content={\n <RuntimeContentPart mountContent={featureNotificationsData?.mountItem} content={latestFeature.content} />\n }\n trackKey={latestFeature.id}\n position=\"left\"\n getTrack={() => triggerRef.current}\n />\n );\n }\n\n const setFeaturesToSeenAndPersist = () => {\n const persistenceConfig = featureNotificationsData?.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n const featuresMap = featureNotificationsData?.features.reduce((acc, feature) => {\n return {\n ...acc,\n [feature.id]: feature.releaseDate,\n };\n }, {});\n const filteredSeenFeaturesMap = filterOutdatedFeatures(seenFeatures);\n const allFeaturesMap = { ...featuresMap, ...filteredSeenFeaturesMap };\n (featureNotificationsData?.__persistFeatureNotifications ?? persistFeatureNotifications)(\n persistenceConfig,\n allFeaturesMap\n ).then(() => {\n setSeenFeatures(allFeaturesMap);\n setFeatureNotificationsData(data => (data ? { ...data, badge: false } : data));\n });\n };\n\n const getFeaturePromptPersistenceId = (feature?: Feature<unknown> | null) => `${feature?.id}_feature-prompt`;\n\n const persistFeaturePromptDismiss = (feature: Feature<unknown>) => {\n const persistenceConfig = featureNotificationsData?.persistenceConfig ?? DEFAULT_PERSISTENCE_CONFIG;\n const featuresMap = { [getFeaturePromptPersistenceId(feature)]: feature.releaseDate?.toString() };\n const filteredSeenFeaturesMap = filterOutdatedFeatures(seenFeatures);\n const allFeaturesMap = { ...featuresMap, ...filteredSeenFeaturesMap };\n (featureNotificationsData?.__persistFeatureNotifications ?? persistFeatureNotifications)(\n persistenceConfig,\n allFeaturesMap\n ).then(() => {\n setSeenFeatures(allFeaturesMap);\n });\n };\n\n const onOpenFeatureNotificationsDrawer = () => {\n if (!featureNotificationsData || allNotificationsSeen) {\n return;\n }\n\n setFeaturesToSeenAndPersist();\n };\n\n const featureNotificationsProps: FeatureNotificationsProps = {\n renderLatestFeaturePrompt,\n drawer: featureNotificationsData && mapPayloadToDrawer(featureNotificationsData),\n };\n\n return {\n featureNotificationsProps,\n onOpenFeatureNotificationsDrawer,\n featureNotificationsMessageHandler,\n };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export var PACKAGE_SOURCE = "components";
|
|
2
|
-
export var PACKAGE_VERSION = "3.0.0 (
|
|
3
|
-
export var GIT_SHA = "
|
|
2
|
+
export var PACKAGE_VERSION = "3.0.0 (3dcd7e02)";
|
|
3
|
+
export var GIT_SHA = "3dcd7e02";
|
|
4
4
|
export var THEME = "open-source-visual-refresh";
|
|
5
5
|
export var SYSTEM = "core";
|
|
6
6
|
export var ALWAYS_VISUAL_REFRESH = true;
|