diff --git a/src/components/editors/EditorUploadCoverButton/index.tsx b/src/components/editors/EditorUploadCoverButton/index.tsx index 8f9f509d..5a80b1ea 100644 --- a/src/components/editors/EditorUploadCoverButton/index.tsx +++ b/src/components/editors/EditorUploadCoverButton/index.tsx @@ -13,10 +13,10 @@ type IProps = IEditorComponentProps & {}; const EditorUploadCoverButton: FC = () => { const { values, setFieldValue } = useNodeFormContext(); - const { uploadFiles, files, pendingImages } = useUploader( + const { uploadFile, files, pendingImages } = useUploader( UploadSubject.Editor, UploadTarget.Nodes, - [] + values.cover ? [values.cover] : [] ); const background = values.cover ? getURL(values.cover, PRESETS['300']) : null; @@ -27,14 +27,15 @@ const EditorUploadCoverButton: FC = () => { }, [setFieldValue]); const onInputChange = useCallback( - (event: ChangeEvent) => { + async (event: ChangeEvent) => { const files = Array.from(event.target.files || []) .filter(file => getFileType(file) === UploadType.Image) .slice(0, 1); - uploadFiles(files); + const result = await uploadFile(files[0]); + setFieldValue('cover', result); }, - [uploadFiles] + [uploadFile, setFieldValue] ); useEffect(() => { diff --git a/src/components/tags/TagAutocomplete/index.tsx b/src/components/tags/TagAutocomplete/index.tsx index af8941bb..3949c267 100644 --- a/src/components/tags/TagAutocomplete/index.tsx +++ b/src/components/tags/TagAutocomplete/index.tsx @@ -11,6 +11,7 @@ interface TagAutocompleteProps { onSelect: (val: string) => void; search: string; options: string[]; + visible: boolean; } const TagAutocomplete: VFC = ({ @@ -19,6 +20,7 @@ const TagAutocomplete: VFC = ({ onSelect, search, options, + visible, }) => { const [selected, setSelected] = useState(-1); const [categories, tags] = useMemo( @@ -82,7 +84,7 @@ const TagAutocomplete: VFC = ({ return (
= ({ exclude, onAppend, onClearTag, onSubmit }) => { /> - {focused && input?.length > 0 && ref.current && ( + {!!ref.current && ( 0} exclude={exclude} input={ref.current} onSelect={onAutocompleteSelect} diff --git a/src/hooks/node/useNodeTags.ts b/src/hooks/node/useNodeTags.ts index 9d5a9fd0..289b5a7e 100644 --- a/src/hooks/node/useNodeTags.ts +++ b/src/hooks/node/useNodeTags.ts @@ -4,8 +4,10 @@ import { ITag } from '~/types'; import { URLS } from '~/constants/urls'; import { useLoadNode } from '~/hooks/node/useLoadNode'; import { apiDeleteNodeTag, apiPostNodeTags } from '~/api/node'; +import { useGetNodeRelated } from '~/hooks/node/useGetNodeRelated'; export const useNodeTags = (id: number) => { + const { refresh: refreshRelated } = useGetNodeRelated(id); const { update } = useLoadNode(id); const history = useHistory(); @@ -14,11 +16,12 @@ export const useNodeTags = (id: number) => { try { const result = await apiPostNodeTags({ id, tags }); await update({ tags: result.node.tags }); + await refreshRelated(); } catch (error) { console.warn(error); } }, - [id, update] + [id, update, refreshRelated] ); const onClick = useCallback( @@ -37,11 +40,12 @@ export const useNodeTags = (id: number) => { try { const result = await apiDeleteNodeTag({ id, tagId }); await update({ tags: result.tags }); + await refreshRelated(); } catch (e) { console.warn(e); } }, - [id, update] + [id, update, refreshRelated] ); return { onDelete, onChange, onClick }; diff --git a/src/layouts/NodeLayout/index.tsx b/src/layouts/NodeLayout/index.tsx index f5645640..74643067 100644 --- a/src/layouts/NodeLayout/index.tsx +++ b/src/layouts/NodeLayout/index.tsx @@ -42,7 +42,7 @@ const NodeLayout: FC = () => { title={node.title} username={node.user?.username} likeCount={node?.like_count || 0} - isHeroic={!!node.is_promoted} + isHeroic={!!node.is_heroic} isLiked={!!node.is_liked} isLocked={!!node.deleted_at} isLoading={isLoading} diff --git a/src/utils/node.ts b/src/utils/node.ts index 7fcf664c..3ac91a9a 100644 --- a/src/utils/node.ts +++ b/src/utils/node.ts @@ -15,5 +15,5 @@ export const canLikeNode = (node?: Partial, user?: Partial): boole export const canStarNode = (node?: Partial, user?: Partial): boolean => path(['type'], node) === NODE_TYPES.IMAGE && - path(['is_promoted'], node) === false && + path(['is_promoted'], node) === true && path(['role'], user) === Role.Admin; diff --git a/src/utils/providers/NodeRelatedProvider.tsx b/src/utils/providers/NodeRelatedProvider.tsx index f02c8746..ab996c36 100644 --- a/src/utils/providers/NodeRelatedProvider.tsx +++ b/src/utils/providers/NodeRelatedProvider.tsx @@ -15,15 +15,7 @@ const defaultValue: INodeRelated = { }; const NodeRelatedProvider: FC = ({ id, children, tags }) => { - const { related, isLoading, refresh } = useGetNodeRelated(id); - - useEffect( - () => { - refresh(); - }, - // eslint-disable-next-line - [tags] - ); + const { related, isLoading } = useGetNodeRelated(id); return (