import { invalidate } from '$app/navigation';Читать полностью…
...
function handleRemoveClick() {
const response = fetch(`/${title}/${item.id}/${key}`, {method: 'DELETE'})
invalidate('data:item');
};
Нет, если у тебя он приходит из load функции, то её нужно перезапустить через invalidate
Читать полностью…Короче, после нажатия кнопки Save
данные в бэк отправляются, но форма не обновляется. Конкретно поле с файлом.
updateItem
у меня ложит в lib/server/database.js
, он сначала собирает все и оптправляет файлы, а потом остальные поля формы. Как-то вот так...
Есть в общем вот такая вот формочка, из которой данные отправляются во внешний API:
Читать полностью…Она заново отработает, отправит запрос на твой api (не разбирался особо что она делает) и вернёт новые данные
Читать полностью…Если нет — значит нужно запустить то, что загружает данные о файлике после успешной отправки формы из ehance функции
Читать полностью…Короче, если файлик загружается через load функцию и его нужно отобразить после загрузки — invaidate
Читать полностью…input
с загруженным файлом я вывожу вот так:
<inputЧитать полностью…
name={key}
autocomplete="off"
type={type}
/>
{#if value}
{value}
<button on:click|preventDefault={handleRemoveClick}>Remove File</button>
{/if}
export async function load({ params, depends }) {Читать полностью…
depends('data:item')
const item = await getItem(params.project, params.id);
return { item };
}
export async function updateItem(project, id, data) {Читать полностью…
const files = Object.fromEntries(
Object.entries(data).filter(
([key, value]) => value instanceof File && value.size !== 0
)
);
for (let key in files)
{
const data = new FormData()
data.append('file', files[key]);
await deleteFile(project, id, key);
await uploadFile(project, id, key, data);
}
const fields = Object.fromEntries(
Object.entries(data).filter(
([key, value]) => !(value instanceof File)
)
);
const options = {
method: 'PUT',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(fields)
}
const response = await fetch(`${BACKEND_URL}/${project}/${id}`, options);
if (response.status !== 200) throw error(response.status);
const item = await response.json();
return item;
}
Всё это дело происходит через action, конкретно update, вот как он выглядит:
export const actions = {Читать полностью…
update: async ({ request, params }) => {
const formData = await request.formData();
const updateData = Object.fromEntries(Array.from(formData.entries()).filter(entry => entry[1] !== ""));
const item = await updateItem(params.project, params.id, updateData);
throw redirect(303, `/${params.project}/${params.id}`);
},
};
Надо создать файл entry.cjs а в нем контент:
async function loadApp() {
const { app } = await import("./app.js"); // this is your normal entry file - (index.js, main.js, app.mjs etc.)
}
loadApp()
нужен JS программист, задача: написать расширение на google chrome для выжимки информации с сайта.
за подробностями в ЛС.