* wip * stash * fix: make authenticationId nullable fk * fix: apply generics to resolve compile time type errors * fix: loosen integration settings * chore: refactor into functional component * feat: pass integrations all the way to embeds * perf: avoid re-fetching integrations * fix: change attr name to avoid type overlap * feat: use hostname from embed settings in matcher * Revert "feat: use hostname from embed settings in matcher" This reverts commit e7485d9cda4dcf45104e460465ca104a56c67ddc. * feat: refactor into a class * chore: refactor url regex formation as a util * fix: escape regex special chars * fix: remove in-house escapeRegExp in favor of lodash's * fix: sanitize url * perf: memoize embeds * fix: rename hostname to url and allow spreading entire settings instead of just url * fix: replace diagrams with drawio * fix: rename * fix: support self-hosted and saas both * fix: assert on settings url * fix: move embed integrations loading to hook * fix: address review comments * fix: use observer in favor of explicit state setters * fix: refactor useEmbedIntegrations into useEmbeds * fix: use translations for toasts Co-authored-by: Tom Moor <tom.moor@gmail.com>
42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { find } from "lodash";
|
|
import * as React from "react";
|
|
import embeds, { EmbedDescriptor } from "@shared/editor/embeds";
|
|
import { IntegrationType } from "@shared/types";
|
|
import Integration from "~/models/Integration";
|
|
import Logger from "~/utils/Logger";
|
|
import useStores from "./useStores";
|
|
|
|
export default function useEmbedIntegrations() {
|
|
const { integrations } = useStores();
|
|
|
|
React.useEffect(() => {
|
|
async function fetchEmbedIntegrations() {
|
|
try {
|
|
await integrations.fetchPage({
|
|
limit: 100,
|
|
type: IntegrationType.Embed,
|
|
});
|
|
} catch (err) {
|
|
Logger.error("Failed to fetch embed integrations", err);
|
|
}
|
|
}
|
|
|
|
!integrations.isLoaded && fetchEmbedIntegrations();
|
|
}, [integrations]);
|
|
|
|
return React.useMemo(
|
|
() =>
|
|
embeds.map((e) => {
|
|
const em: Integration<IntegrationType.Embed> | undefined = find(
|
|
integrations.orderedData,
|
|
(i) => i.service === e.component.name.toLowerCase()
|
|
);
|
|
return new EmbedDescriptor({
|
|
...e,
|
|
settings: em?.settings,
|
|
});
|
|
}),
|
|
[integrations.orderedData]
|
|
);
|
|
}
|