-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathindex.ts
48 lines (42 loc) · 1.69 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { WP_REST_API_Term } from 'wp-types';
import { usePost } from '../use-post';
import { useIsSupportedTaxonomy } from '../use-is-supported-taxonomy';
import { useAllTerms } from '../use-all-terms';
import { useSelectedTermIds } from '../use-selected-term-ids';
import { useSelectedTermsOfSavedPost } from '../use-selected-terms-of-saved-post';
export const useSelectedTerms = (
taxonomyName: string,
): [Array<WP_REST_API_Term> | null | undefined, boolean] => {
const { postId, postType, isEditable } = usePost();
const [isSupportedTaxonomy, hasResolvedIsSupportedTaxonomy] = useIsSupportedTaxonomy(
postType,
taxonomyName,
);
const [selectedTermIds, hasResolvedSelectedTermIds] = useSelectedTermIds(taxonomyName);
const [terms, hasResolvedTerms] = useAllTerms(taxonomyName);
const [selectedTermsOfSavedPost, hasResolvedSelectedTermsOfSavedPost] =
useSelectedTermsOfSavedPost(taxonomyName, postId as number);
if (!hasResolvedIsSupportedTaxonomy) {
return [[] as const, false] as const;
}
if (!isSupportedTaxonomy && hasResolvedIsSupportedTaxonomy) {
// eslint-disable-next-line no-console
console.error(
`The taxonomy "${taxonomyName}" is not supported for the post type "${postType}". Please use a supported taxonomy.`,
);
return [[], true] as const;
}
if (
(!isEditable && !hasResolvedSelectedTermsOfSavedPost) ||
(isEditable && (!hasResolvedTerms || !hasResolvedSelectedTermIds))
) {
return [[], false];
}
if (!isEditable && hasResolvedSelectedTermsOfSavedPost) {
return [selectedTermsOfSavedPost, hasResolvedSelectedTermsOfSavedPost];
}
return [
terms?.filter((term) => selectedTermIds?.includes(term.id)),
hasResolvedTerms && hasResolvedSelectedTermIds,
] as const;
};