mirror of
https://github.com/outline/outline.git
synced 2026-06-13 11:25:03 +03:00
4dbad4e46c
* 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 e7485d9cda.
* 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]
|
|
);
|
|
}
|