fix: template defects

This commit is contained in:
h z
2025-04-17 21:44:45 +01:00
parent 947b59e3ea
commit 137ea649f8
20 changed files with 323 additions and 280 deletions

View File

@@ -1,7 +1,7 @@
import React, { useContext, useState } from "react"; import React, { useContext, useState } from "react";
import { AuthContext } from "../../AuthProvider"; import { AuthContext } from "../../AuthProvider";
import { useNavigate, useParams } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
import { useMarkdownTemplate, useSaveMarkdownTemplate } from "../../utils/queries/template-queries"; import { useMarkdownTemplate, useSaveMarkdownTemplate } from "../../utils/queries/markdown-template-queries";
import LayoutEditor from "./LayoutEditor"; import LayoutEditor from "./LayoutEditor";
import ParametersManager from "./ParametersManager"; import ParametersManager from "./ParametersManager";
import "bulma/css/bulma.min.css"; import "bulma/css/bulma.min.css";

View File

@@ -1,5 +1,5 @@
import React, {useState} from "react"; import React, {useState} from "react";
import {useMarkdownTemplates} from "../../utils/queries/template-queries"; import {useMarkdownTemplates} from "../../utils/queries/markdown-template-queries";
const TemplateSelector = ({template, onChange}) => { const TemplateSelector = ({template, onChange}) => {
const [_template, setTemplate] = useState(template || { const [_template, setTemplate] = useState(template || {

View File

@@ -6,8 +6,8 @@ import MarkdownView from "./MarkdownView";
import PermissionGuard from "../PermissionGuard"; import PermissionGuard from "../PermissionGuard";
import {useMarkdown} from "../../utils/queries/markdown-queries"; import {useMarkdown} from "../../utils/queries/markdown-queries";
import {usePath} from "../../utils/queries/path-queries"; import {usePath} from "../../utils/queries/path-queries";
import {useMarkdownSetting} from "../../utils/queries/setting-queries"; import {useMarkdownSetting} from "../../utils/queries/markdown-setting-queries";
import {useMarkdownTemplate} from "../../utils/queries/template-queries"; import {useMarkdownTemplate} from "../../utils/queries/markdown-template-queries";
const MarkdownContent = () => { const MarkdownContent = () => {
const { id } = useParams(); const { id } = useParams();

View File

@@ -6,9 +6,10 @@ import "./MarkdownEditor.css";
import PathManager from "../PathManager"; import PathManager from "../PathManager";
import MarkdownView from "./MarkdownView"; import MarkdownView from "./MarkdownView";
import { useMarkdown, useSaveMarkdown } from "../../utils/queries/markdown-queries"; import { useMarkdown, useSaveMarkdown } from "../../utils/queries/markdown-queries";
import {useMarkdownSetting} from "../../utils/queries/setting-queries"; import {useMarkdownSetting} from "../../utils/queries/markdown-setting-queries";
import {useMarkdownTemplate} from "../../utils/queries/template-queries"; import {useMarkdownTemplate} from "../../utils/queries/markdown-template-queries";
import TemplatedEditor from "./TemplatedEditor"; import TemplatedEditor from "./TemplatedEditor";
import {useMarkdownTemplateSetting} from "../../utils/queries/markdown-template-setting-queries";
const MarkdownEditor = () => { const MarkdownEditor = () => {
const { roles } = useContext(AuthContext); const { roles } = useContext(AuthContext);
@@ -20,10 +21,11 @@ const MarkdownEditor = () => {
const [pathId, setPathId] = useState(1); const [pathId, setPathId] = useState(1);
const {data: markdown, isLoading, error} = useMarkdown(id); const {data: markdown, isLoading, error} = useMarkdown(id);
const saveMarkdown = useSaveMarkdown(); const saveMarkdown = useSaveMarkdown();
const {data: setting, isFetching: isSettingFetching} = useMarkdownSetting(markdown?.id); const {data: setting, isFetching: isSettingFetching} = useMarkdownSetting(markdown?.setting_id);
const {data: template, isFetching: isTemplateFetching} = useMarkdownTemplate(setting?.id); const {data: templateSetting, isFetching: isTemplateSettingFetching} = useMarkdownTemplateSetting(setting?.template_setting_id);
const {data: template, isFetching: isTemplateFetching} = useMarkdownTemplate(templateSetting?.template_id);
const notReady = isLoading || isTemplateFetching || isSettingFetching; const notReady = isLoading || isTemplateFetching || isSettingFetching || isTemplateSettingFetching;
useEffect(() => { useEffect(() => {
if(markdown){ if(markdown){
setTitle(markdown.title); setTitle(markdown.title);
@@ -53,7 +55,7 @@ const MarkdownEditor = () => {
if(notReady) if(notReady)
return <p>Loading...</p>; return <p>Loading...</p>;
console.log(markdown?.id);
if(error) if(error)
return <p>{error.message || "Failed to load markdown"}</p>; return <p>{error.message || "Failed to load markdown"}</p>;
@@ -134,4 +136,5 @@ const MarkdownEditor = () => {
); );
}; };
export default MarkdownEditor; export default MarkdownEditor;

View File

@@ -33,7 +33,8 @@ const Translate = ({variable, value}) => {
const ParseTemplate = ({template, variables}) => { const ParseTemplate = ({template, variables}) => {
let res = template.layout; if(!template || !Array.isArray(template.parameters)) return '';
let res = template.layout ?? '';
for (const parameter of template.parameters) { for (const parameter of template.parameters) {
res = res.replaceAll(`<${parameter.name}/>`, Translate({ res = res.replaceAll(`<${parameter.name}/>`, Translate({
variable: parameter, variable: parameter,

View File

@@ -1,5 +1,5 @@
import React, {useState} from "react"; import React, {useState} from "react";
import {useMarkdownTemplate} from "../../utils/queries/template-queries"; import {useMarkdownTemplate} from "../../utils/queries/markdown-template-queries";
const TemplatedEditorComponent = ({ variable, value, namespace, onContentChanged }) => { const TemplatedEditorComponent = ({ variable, value, namespace, onContentChanged }) => {
if(variable.type.base_type === "string") { if(variable.type.base_type === "string") {
@@ -9,7 +9,7 @@ const TemplatedEditorComponent = ({ variable, value, namespace, onContentChanged
<input <input
type="text" type="text"
className="input" className="input"
value={value} value={value ?? ""}
onChange={(e) => onContentChanged(variable.name, e.target.value)} onChange={(e) => onContentChanged(variable.name, e.target.value)}
/> />
<hr/> <hr/>

View File

@@ -1,6 +1,6 @@
import {useCreateMarkdownSetting, useMarkdownSetting} from "../../utils/queries/setting-queries"; import {useCreateMarkdownSetting, useMarkdownSetting} from "../../utils/queries/markdown-setting-queries";
import {useSaveMarkdown} from "../../utils/queries/markdown-queries"; import {useSaveMarkdown} from "../../utils/queries/markdown-queries";
import {useState} from "react"; import React, {useState} from "react";
import MarkdownTemplateSettingPanel from "../Settings/MarkdownSettings/MarkdownTemplateSettingPanel"; import MarkdownTemplateSettingPanel from "../Settings/MarkdownSettings/MarkdownTemplateSettingPanel";
const MarkdownSettingModal = ({isOpen, markdown, onClose}) => { const MarkdownSettingModal = ({isOpen, markdown, onClose}) => {
@@ -40,17 +40,7 @@ const MarkdownSettingModal = ({isOpen, markdown, onClose}) => {
/> />
</header> </header>
{ {
markdownSetting ? ( markdownSetting ? (
<section className="modal-card-body">
<button
className="button is-primary"
type="button"
onClick={handleCreateMarkdownSetting}
>
Create Markdown Setting
</button>
</section>
) : (
<section className="modal-card-body"> <section className="modal-card-body">
<div className="tabs"> <div className="tabs">
<ul> <ul>
@@ -61,11 +51,21 @@ const MarkdownSettingModal = ({isOpen, markdown, onClose}) => {
</div> </div>
{activeTab === "template" && ( {activeTab === "template" && (
<MarkdownTemplateSettingPanel <MarkdownTemplateSettingPanel
markdown={markdownSetting} markdownSetting={markdownSetting}
onClose={onClose} onClose={onClose}
/> />
)} )}
</section> </section>
) : (
<section className="modal-card-body">
<button
className="button is-primary"
type="button"
onClick={handleCreateMarkdownSetting}
>
Create Markdown Setting
</button>
</section>
) )
} }
</div> </div>
@@ -73,4 +73,4 @@ const MarkdownSettingModal = ({isOpen, markdown, onClose}) => {
); );
}; };
export default MarkdownSettingModal;

View File

@@ -1,5 +1,5 @@
import {useUpdatePath} from "../../utils/queries/path-queries"; import {useUpdatePath} from "../../utils/queries/path-queries";
import {useCreatePathSetting, usePathSetting} from "../../utils/queries/setting-queries"; import {useCreatePathSetting, usePathSetting} from "../../utils/queries/path-setting-queries";
import WebhookSettingPanel from "../Settings/PathSettings/WebhookSettingPanel"; import WebhookSettingPanel from "../Settings/PathSettings/WebhookSettingPanel";
import React, {useState} from "react"; import React, {useState} from "react";
const PathSettingModal = ({ isOpen, path, onClose }) => { const PathSettingModal = ({ isOpen, path, onClose }) => {

View File

@@ -68,8 +68,6 @@ const MainNavigation = () => {
const a = document.createElement("a"); const a = document.createElement("a");
const contentDisposition = response.headers.get("Content-Disposition"); const contentDisposition = response.headers.get("Content-Disposition");
let filename = "backup.zip"; let filename = "backup.zip";
console.log(response.headers);
console.log(contentDisposition);
if (contentDisposition) { if (contentDisposition) {
const match = contentDisposition.match(/filename="?([^"]+)"?/); const match = contentDisposition.match(/filename="?([^"]+)"?/);
if (match && match[1]) { if (match && match[1]) {

View File

@@ -1,8 +1,9 @@
import {Link} from "react-router-dom"; import {Link} from "react-router-dom";
import PermissionGuard from "../PermissionGuard"; import PermissionGuard from "../PermissionGuard";
import React from "react"; import React, {useState} from "react";
import MarkdownSettingModal from "../Modals/MarkdownSettingModal";
const MarkdownNode = ({markdown, handleMoveMarkdown}) => { const MarkdownNode = ({markdown, handleMoveMarkdown}) => {
const [isMarkdownSettingModalOpen, setIsMarkdownSettingModalOpen] = useState(false);
return ( return (
<li key={markdown.id}> <li key={markdown.id}>
<div className="is-clickable field has-addons"> <div className="is-clickable field has-addons">
@@ -12,7 +13,21 @@ const MarkdownNode = ({markdown, handleMoveMarkdown}) => {
</Link> </Link>
</span> </span>
<PermissionGuard rolesRequired={['admin']}> <PermissionGuard rolesRequired={['admin']}>
<div className="control"> <p className="control">
<button
className="button is-small is-success"
onClick={() => setIsMarkdownSettingModalOpen(true)}
type="button"
>
<span className="icon">
<i className="fas fa-cog"/>
</span>
</button>
</p>
<div
className="control is-flex is-flex-direction-column is-align-items-center"
style={{marginLeft: "0.5rem"}}
>
<button <button
className="button is-small mb-1 move-forward" className="button is-small mb-1 move-forward"
style={{height: "1rem", padding: "0.25rem"}} style={{height: "1rem", padding: "0.25rem"}}
@@ -28,6 +43,11 @@ const MarkdownNode = ({markdown, handleMoveMarkdown}) => {
> >
</button> </button>
</div> </div>
<MarkdownSettingModal
isOpen={isMarkdownSettingModalOpen}
markdown={markdown}
onClose={() => setIsMarkdownSettingModalOpen(false)}
/>
</PermissionGuard> </PermissionGuard>
</div> </div>

View File

@@ -31,7 +31,6 @@ const PathNode = ({ path, isRoot = false }) => {
}; };
const handleSave = () => { const handleSave = () => {
console.log(`handleSave ${path.id}`);
updatePath.mutate({id: path.id, data: {name: newName}}, { updatePath.mutate({id: path.id, data: {name: newName}}, {
onSuccess: () => setIsEditing(false), onSuccess: () => setIsEditing(false),
onError: err => alert("failed to update this path"), onError: err => alert("failed to update this path"),
@@ -135,7 +134,7 @@ const PathNode = ({ path, isRoot = false }) => {
type="button" type="button"
> >
<span className="icon"> <span className="icon">
<i className="fas fa-cog"></i> <i className="fas fa-cog"/>
</span> </span>
</button> </button>
</p> </p>

View File

@@ -1,17 +1,21 @@
import { import {
useCreateMarkdownTemplateSetting,
useMarkdownTemplate, useMarkdownTemplate,
useMarkdownTemplates, useMarkdownTemplates,
useMarkdownTemplateSetting, useUpdateMarkdownTemplateSetting } from "../../../utils/queries/markdown-template-queries";
} from "../../../utils/queries/template-queries"; import {
import {useState} from "react"; useCreateMarkdownTemplateSetting,
import {useUpdateMarkdownSetting} from "../../../utils/queries/setting-queries"; useMarkdownTemplateSetting,
useUpdateMarkdownTemplateSetting
} from "../../../utils/queries/markdown-template-setting-queries";
import React, {useEffect, useState} from "react";
import {useUpdateMarkdownSetting} from "../../../utils/queries/markdown-setting-queries";
const MarkdownTemplateSettingPanel = ({markdownSetting, onClose}) => { const MarkdownTemplateSettingPanel = ({markdownSetting, onClose}) => {
const {data: setting, isFetching: settingIsFetching } = useMarkdownTemplateSetting(markdownSetting.template_setting_id || 0); const {data: setting, isFetching: settingIsFetching } = useMarkdownTemplateSetting(markdownSetting?.template_setting_id);
const {data: templates, isFetching: templatesAreFetching}=useMarkdownTemplates(); const {data: templates, isFetching: templatesAreFetching}=useMarkdownTemplates();
const {data: template, isFetching: templateIsFetching} = useMarkdownTemplate(setting?.template_id); const {data: template, isFetching: templateIsFetching} = useMarkdownTemplate(setting?.template_id);
const [selectedTemplate, setSelectedTemplate] = useState(template); const [selectedTemplateId, setSelectedTemplateId] = useState(template?.id ?? undefined);
const [selectedTemplate, setSelectedTemplate] = useState(templates?.find(t => t.id === selectedTemplateId) || undefined);
const createMarkdownTemplateSetting = useCreateMarkdownTemplateSetting(); const createMarkdownTemplateSetting = useCreateMarkdownTemplateSetting();
const updateMarkdownSetting = useUpdateMarkdownSetting(); const updateMarkdownSetting = useUpdateMarkdownSetting();
@@ -33,7 +37,7 @@ const MarkdownTemplateSettingPanel = ({markdownSetting, onClose}) => {
updateMarkdownTemplateSetting.mutate({ updateMarkdownTemplateSetting.mutate({
id: setting.id, id: setting.id,
data: { data: {
template_id: selectedTemplate.id, template_id: selectedTemplateId,
} }
}, { }, {
onSuccess: () => alert("Saved"), onSuccess: () => alert("Saved"),
@@ -42,9 +46,17 @@ const MarkdownTemplateSettingPanel = ({markdownSetting, onClose}) => {
onClose(); onClose();
}; };
useEffect(() => {
if(template?.id && selectedTemplateId === undefined) {
setSelectedTemplateId(template?.id ?? undefined);
setSelectedTemplate(templates?.find(t => t.id === selectedTemplateId) || undefined);
}
},[template, selectedTemplateId]);
if (settingIsFetching || templatesAreFetching || templatesAreFetching || templateIsFetching) { if (settingIsFetching || templatesAreFetching || templatesAreFetching || templateIsFetching) {
return (<p>Loading...</p>); return (<p>Loading...</p>);
} }
console.log("template", template);
console.log("selectedTemplateId", selectedTemplateId);
return setting ? ( return setting ? (
<div className="box" style={{marginTop: "1rem"}}> <div className="box" style={{marginTop: "1rem"}}>
<h4 className="title is-5">Template Setting</h4> <h4 className="title is-5">Template Setting</h4>
@@ -52,12 +64,14 @@ const MarkdownTemplateSettingPanel = ({markdownSetting, onClose}) => {
<label className="label">Use Template</label> <label className="label">Use Template</label>
<div className="select is-fullwidth"> <div className="select is-fullwidth">
<select <select
value={selectedTemplate.title} value={selectedTemplateId}
onChange={(e) => setSelectedTemplate(e.target.value)} onChange={(e) => {
setSelectedTemplateId(e.target.value);
}}
> >
<option value="">(default)</option> <option value="">(default)</option>
{templates.map((_template, index) => ( {templates.map((_template, index) => (
<option key={index} value={_template}>{_template.title}</option> <option key={index} value={_template.id}>{_template.title}</option>
))} ))}
</select> </select>
@@ -77,7 +91,7 @@ const MarkdownTemplateSettingPanel = ({markdownSetting, onClose}) => {
type="button" type="button"
onClick={handleCreateTemplateSetting} onClick={handleCreateTemplateSetting}
> >
Create Template Setting Create Template Setting
</button> </button>
); );
}; };

View File

@@ -11,7 +11,7 @@ import {
useUpdateWebhook, useUpdateWebhook,
useDeleteWebhook, useDeleteWebhook,
} from "../../../utils/queries/webhook-queries"; } from "../../../utils/queries/webhook-queries";
import {useUpdatePathSetting} from "../../../utils/queries/setting-queries"; import {useUpdatePathSetting} from "../../../utils/queries/path-setting-queries";
const WebhookSettingPanel = ({pathSetting, onClose}) => { const WebhookSettingPanel = ({pathSetting, onClose}) => {

View File

@@ -61,7 +61,7 @@ export const useSaveMarkdown = () => {
const url = id const url = id
? `${config.BACKEND_HOST}/api/markdown/${id}` ? `${config.BACKEND_HOST}/api/markdown/${id}`
: `${config.BACKEND_HOST}/api/markdown/`; : `${config.BACKEND_HOST}/api/markdown/`;
const method = id ? "PUT" : "POST"; const method = id ? "PATCH" : "POST";
return fetch_(url, { return fetch_(url, {
method, method,
body: JSON.stringify(data), body: JSON.stringify(data),
@@ -70,6 +70,7 @@ export const useSaveMarkdown = () => {
onSuccess: (res) => { onSuccess: (res) => {
queryClient.invalidateQueries(["markdownsByPath", res.path_id]); queryClient.invalidateQueries(["markdownsByPath", res.path_id]);
queryClient.invalidateQueries(["markdown", res.id]); queryClient.invalidateQueries(["markdown", res.id]);
queryClient.invalidateQueries("tree");
}, },
}); });
}; };
@@ -87,6 +88,7 @@ export const useMoveMarkdown = () => {
{ {
onSuccess: () => { onSuccess: () => {
queryClient.invalidateQueries("paths"); queryClient.invalidateQueries("paths");
queryClient.invalidateQueries("tree");
} }
} }
); );

View File

@@ -0,0 +1,75 @@
import {useConfig} from "../../ConfigProvider";
import {useMutation, useQuery, useQueryClient} from "react-query";
import {fetch_} from "../request-utils";
export const useMarkdownSettings = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useQuery(
"markdown_setting",
() => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/`),
{
onSuccess: (data) => {
if(data){
for(const setting of data)
queryClient.invalidateQueries(["markdown_setting", setting.id]);
}
}
}
);
};
export const useMarkdownSetting = (setting_id) => {
const config = useConfig();
return useQuery(
["markdown_setting", setting_id],
() => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/${setting_id}`, {}), {
enabled: !!setting_id,
}
);
};
export const useCreateMarkdownSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
(data) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/`, {
method: "POST",
body: JSON.stringify(data)
}), {
onSuccess: (data) => {
queryClient.invalidateQueries(["markdown_setting", data.id]);
}
}
);
};
export const useUpdateMarkdownSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
({id, data}) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/${id}`, {
method: "PATCH",
body: JSON.stringify(data)
}),{
onSuccess: (data, variables) => {
queryClient.invalidateQueries(["markdown_setting", variables.id]);
}
});
};
export const useDeleteMarkdownSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
(id) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/${id}`, {
method: "DELETE",
}),{
onSuccess: (data) => {
queryClient.invalidateQueries(["markdown_setting", data.id]);
}
}
);
};

View File

@@ -24,7 +24,7 @@ export const useMarkdownTemplates = () => {
onSuccess: (data) => { onSuccess: (data) => {
if(data){ if(data){
for(const template of data){ for(const template of data){
queryClient.setQueryData(["markdown_template", template.id], data); queryClient.setQueryData(["markdown_template", template.id], template);
} }
} }
} }
@@ -99,75 +99,3 @@ export const useSaveMarkdownTemplate = () => {
} }
}); });
} }
export const useMarkdownTemplateSettings = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useQuery(
"markdown_template_settings",
() => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/`), {
onSuccess: (data) => {
if(data){
for(const setting of data){
queryClient.invalidateQueries(["markdown_template_setting", settings.id]);
}
}
}
}
);
};
export const useMarkdownTemplateSetting = (setting_id) => {
const config = useConfig();
const queryClient = useQueryClient();
return useQuery(
["markdown_template_setting", setting_id],
() => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/${settings.id}`), {
enabled: !!setting_id,
}
);
};
export const useCreateMarkdownTemplateSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(({id, data}) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/${id}`, {
method: "POST",
body: JSON.stringify(data),
}), {
onSuccess: (data) => {
queryClient.invalidateQueries(["markdown_template_setting", data.id]);
}
});
};
export const useUpdateMarkdownTemplateSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
({id, data}) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/${id}`, {
method: "PUT",
body: JSON.stringify(data),
}),{
onSuccess: (res) => {
queryClient.invalidateQueries(["markdown_template_setting", res.id]);
queryClient.invalidateQueries("markdown_template_settings");
}
}
);
};
export const useDeleteMarkdownTemplateSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
({id}) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/${id}`, {
method: "DELETE",
}), {
onSuccess: (res, variables) => {
queryClient.invalidateQueries(["markdown_template_setting", variables.id]);
}
}
);
};

View File

@@ -0,0 +1,74 @@
import {useConfig} from "../../ConfigProvider";
import {useMutation, useQuery, useQueryClient} from "react-query";
import {fetch_} from "../request-utils";
export const useMarkdownTemplateSettings = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useQuery(
"markdown_template_settings",
() => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/`), {
onSuccess: (data) => {
if(data){
for(const setting of data){
queryClient.invalidateQueries(["markdown_template_setting", settings.id]);
}
}
}
}
);
};
export const useMarkdownTemplateSetting = (setting_id) => {
const config = useConfig();
return useQuery(
["markdown_template_setting", setting_id],
() => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/${setting_id}`), {
enabled: !!setting_id,
}
);
};
export const useCreateMarkdownTemplateSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation((data) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/`, {
method: "POST",
body: JSON.stringify(data),
}), {
onSuccess: (data) => {
queryClient.invalidateQueries(["markdown_template_setting", data.id]);
}
});
};
export const useUpdateMarkdownTemplateSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
({id, data}) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/${id}`, {
method: "PATCH",
body: JSON.stringify(data),
}),{
onSuccess: (res) => {
queryClient.invalidateQueries(["markdown_template_setting", res.id]);
queryClient.invalidateQueries("markdown_template_settings");
}
}
);
};
export const useDeleteMarkdownTemplateSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
({id}) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/template/${id}`, {
method: "DELETE",
}), {
onSuccess: (res, variables) => {
queryClient.invalidateQueries(["markdown_template_setting", variables.id]);
}
}
);
};

View File

@@ -0,0 +1,80 @@
import {useConfig} from "../../ConfigProvider";
import {useMutation, useQuery, useQueryClient} from "react-query";
import {fetch_} from "../request-utils";
export const usePathSettings = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useQuery(
"path_settings",
() => fetch_(`${config.BACKEND_HOST}/api/setting/path/`),
{
onSuccess: (data) => {
if(data){
for(const setting of data)
queryClient.setQueryData(["path_setting", setting.id], setting);
}
}
}
);
};
export const usePathSetting = (setting_id) => {
const config = useConfig();
return useQuery(
["path_setting", setting_id],
() => fetch_(`${config.BACKEND_HOST}/api/setting/path/${setting_id}`),
{
enabled: !!setting_id,
}
);
};
export const useCreatePathSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
(data) => fetch_(`${config.BACKEND_HOST}/api/setting/path/`, {
method: "POST",
body: JSON.stringify(data)
}), {
onSuccess: (data) => {
queryClient.invalidateQueries(["path_setting", data.id]);
queryClient.invalidateQueries("path_settings");
}
}
);
};
export const useUpdatePathSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
({id, data}) => fetch_(`${config.BACKEND_HOST}/api/setting/path/${id}`, {
method: "PATCH",
body: JSON.stringify(data)
}), {
onSuccess: (data, variables) => {
queryClient.invalidateQueries(["path_setting", variables.id]);
queryClient.invalidateQueries("path_settings");
}
}
);
};
export const useDeletePathSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
(id) => fetch_(`${config.BACKEND_HOST}/api/setting/path/${id}`, {
method: "DELETE",
}),{
onSuccess: (data, variables) => {
queryClient.invalidateQueries(["path_setting", variables.id]);
queryClient.invalidateQueries("path_settings");
}
}
);
};

View File

@@ -1,151 +0,0 @@
import {fetch_} from "../request-utils";
import {useConfig} from "../../ConfigProvider";
import {useMutation, useQuery, useQueryClient} from "react-query";
export const usePathSettings = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useQuery(
"path_settings",
() => fetch_(`${config.BACKEND_HOST}/api/setting/path/`),
{
onSuccess: (data) => {
if(data){
for(const setting of data)
queryClient.setQueryData(["path_setting", setting.id], setting);
}
}
}
);
};
export const usePathSetting = (setting_id) => {
const config = useConfig();
return useQuery(
["path_setting", setting_id],
() => fetch_(`${config.BACKEND_HOST}/api/setting/path/${setting_id}`),
{
enabled: !!setting_id,
}
);
};
export const useCreatePathSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
(data) => fetch_(`${config.BACKEND_HOST}/api/setting/path/`, {
method: "POST",
body: JSON.stringify(data)
}), {
onSuccess: (data) => {
queryClient.invalidateQueries(["path_setting", data.id]);
queryClient.invalidateQueries("path_setting");
}
}
);
};
export const useUpdatePathSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
({id, data}) => fetch_(`${config.BACKEND_HOST}/api/setting/path/${id}`, {
method: "PATCH",
body: JSON.stringify(data)
}), {
onSuccess: (data, variables) => {
queryClient.invalidateQueries(["path_setting", variables.id]);
queryClient.invalidateQueries("path_setting");
}
}
);
};
export const useDeletePathSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
(id) => fetch_(`${config.BACKEND_HOST}/api/setting/path/${id}`, {
method: "DELETE",
}),{
onSuccess: (data, variables) => {
queryClient.invalidateQueries(["path_setting", variables.id]);
queryClient.invalidateQueries("path_setting");
}
}
);
};
export const useMarkdownSettings = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useQuery(
"markdown_setting",
() => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/`),
{
onSuccess: (data) => {
if(data){
for(const setting of data)
queryClient.invalidateQueries(["markdown_setting", setting.id]);
}
}
}
);
};
export const useMarkdownSetting = (setting_id) => {
const config = useConfig();
return useQuery(
["markdown_setting", setting_id],
() => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/${setting_id}`, {}), {
enabled: !!setting_id,
}
);
};
export const useCreateMarkdownSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
(data) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/`, {
method: "POST",
body: JSON.stringify(data)
}), {
onSuccess: (data) => {
queryClient.invalidateQueries(["path_setting", data.id]);
}
}
);
};
export const useUpdateMarkdownSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
({id, data}) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/${id}`, {
method: "PATCH",
body: JSON.stringify(data)
}),{
onSuccess: (data) => {
queryClient.invalidateQueries(["path_setting", data.id]);
}
});
};
export const useDeleteMarkdownSetting = () => {
const config = useConfig();
const queryClient = useQueryClient();
return useMutation(
(id) => fetch_(`${config.BACKEND_HOST}/api/setting/markdown/${id}`, {
method: "DELETE",
}),{
onSuccess: (data) => {
queryClient.invalidateQueries(["path_setting", data.id]);
}
}
);
};

View File

@@ -77,7 +77,7 @@ export const useWebhookSettings = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useQuery( return useQuery(
"webhook_setting", "webhook_setting",
() => fetch_(`${config.BACKEND_HOST}/api/setting/webhook/`), () => fetch_(`${config.BACKEND_HOST}/api/setting/path/webhook/`),
{ {
onSuccess: (data) => { onSuccess: (data) => {
if(data){ if(data){
@@ -94,7 +94,7 @@ export const useWebhookSetting = (setting_id) => {
const config = useConfig(); const config = useConfig();
return useQuery( return useQuery(
["webhook_setting", setting_id], ["webhook_setting", setting_id],
() => fetch_(`${config.BACKEND_HOST}/api/setting/webhook/${setting_id}`), () => fetch_(`${config.BACKEND_HOST}/api/setting/path/webhook/${setting_id}`),
{ {
enabled: !!setting_id, enabled: !!setting_id,
}); });
@@ -105,7 +105,7 @@ export const useCreateWebhookSetting = () => {
const config = useConfig(); const config = useConfig();
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation( return useMutation(
(data) => fetch_(`${config.BACKEND_HOST}/api/setting/webhook/`, { (data) => fetch_(`${config.BACKEND_HOST}/api/setting/path/webhook/`, {
method: "POST", method: "POST",
body: JSON.stringify(data) body: JSON.stringify(data)
}),{ }),{
@@ -121,7 +121,7 @@ export const useUpdateWebhookSetting = () => {
const config = useConfig(); const config = useConfig();
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation( return useMutation(
({id, data}) => fetch_(`${config.BACKEND_HOST}/api/setting/webhook/${id}`, { ({id, data}) => fetch_(`${config.BACKEND_HOST}/api/setting/path/webhook/${id}`, {
method: "PATCH", method: "PATCH",
body: JSON.stringify(data) body: JSON.stringify(data)
}),{ }),{
@@ -138,7 +138,7 @@ export const useDeleteWebhookSetting = () => {
const config = useConfig(); const config = useConfig();
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation( return useMutation(
(id) => fetch_(`${config.BACKEND_HOST}/api/setting/webhook/${id}`, { (id) => fetch_(`${config.BACKEND_HOST}/api/setting/path/webhook/${id}`, {
method: "DELETE", method: "DELETE",
}), }),
{ {