+page.svelte 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <script>
  2. import { goto } from '$app/navigation';
  3. import { page } from '$app/stores';
  4. import { getToolById, getTools, updateToolById } from '$lib/apis/tools';
  5. import Spinner from '$lib/components/common/Spinner.svelte';
  6. import ToolkitEditor from '$lib/components/workspace/Tools/ToolkitEditor.svelte';
  7. import { WEBUI_VERSION } from '$lib/constants';
  8. import { tools } from '$lib/stores';
  9. import { compareVersion, extractFrontmatter } from '$lib/utils';
  10. import { onMount, getContext } from 'svelte';
  11. import { toast } from 'svelte-sonner';
  12. const i18n = getContext('i18n');
  13. let tool = null;
  14. const saveHandler = async (data) => {
  15. console.log(data);
  16. const manifest = extractFrontmatter(data.content);
  17. if (compareVersion(manifest?.required_open_webui_version ?? '0.0.0', WEBUI_VERSION)) {
  18. console.log('Version is lower than required');
  19. toast.error(
  20. $i18n.t(
  21. 'Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})',
  22. {
  23. OPEN_WEBUI_VERSION: WEBUI_VERSION,
  24. REQUIRED_VERSION: manifest?.required_open_webui_version ?? '0.0.0'
  25. }
  26. )
  27. );
  28. return;
  29. }
  30. const res = await updateToolById(localStorage.token, tool.id, {
  31. id: data.id,
  32. name: data.name,
  33. meta: data.meta,
  34. content: data.content,
  35. access_control: data.access_control
  36. }).catch((error) => {
  37. toast.error(`${error}`);
  38. return null;
  39. });
  40. if (res) {
  41. toast.success($i18n.t('Tool updated successfully'));
  42. tools.set(await getTools(localStorage.token));
  43. // await goto('/workspace/tools');
  44. }
  45. };
  46. onMount(async () => {
  47. console.log('mounted');
  48. const id = $page.url.searchParams.get('id');
  49. if (id) {
  50. tool = await getToolById(localStorage.token, id).catch((error) => {
  51. toast.error(`${error}`);
  52. goto('/workspace/tools');
  53. return null;
  54. });
  55. console.log(tool);
  56. }
  57. });
  58. </script>
  59. {#if tool}
  60. <ToolkitEditor
  61. edit={true}
  62. id={tool.id}
  63. name={tool.name}
  64. meta={tool.meta}
  65. content={tool.content}
  66. accessControl={tool.access_control}
  67. onSave={(value) => {
  68. saveHandler(value);
  69. }}
  70. />
  71. {:else}
  72. <div class="flex items-center justify-center h-full">
  73. <div class=" pb-16">
  74. <Spinner className="size-5" />
  75. </div>
  76. </div>
  77. {/if}