diff --git a/frontend/package.json b/frontend/package.json index 8279b3fd3b..a1a89771b1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -48,7 +48,7 @@ "watch:app:main": "clojure -M:dev:shadow-cljs watch main worker storybook", "clear:shadow-cache": "rm -rf .shadow-cljs", "watch": "exit 0", - "watch:app": "yarn run clear:shadow-cache && concurrently --kill-others-on-fail \"yarn run watch:app:assets\" \"yarn run watch:app:main\" \"yarn run watch:app:libs\"", + "watch:app": "yarn run clear:shadow-cache && yarn run build:wasm && concurrently --kill-others-on-fail \"yarn run watch:app:assets\" \"yarn run watch:app:main\" \"yarn run watch:app:libs\"", "watch:storybook": "yarn run build:storybook:assets && concurrently --kill-others-on-fail \"storybook dev -p 6006 --no-open\" \"node ./scripts/watch-storybook.js\"" }, "devDependencies": { diff --git a/frontend/scripts/_helpers.js b/frontend/scripts/_helpers.js index c1c018c74c..58d3586995 100644 --- a/frontend/scripts/_helpers.js +++ b/frontend/scripts/_helpers.js @@ -174,6 +174,7 @@ export async function watch(baseDir, predicate, callback) { const watcher = new Watcher(baseDir, { persistent: true, recursive: true, + debounce: 500 }); watcher.on("change", (path) => { @@ -181,8 +182,19 @@ export async function watch(baseDir, predicate, callback) { callback(path); } }); + + + watcher.on("error", (cause) => { + console.log("WATCHER ERROR", cause); + }); } +export async function ensureDirectories() { + await fs.mkdir("./resources/public/js/worker/", { recursive: true }); + await fs.mkdir("./resources/public/css/", { recursive: true }); +} + + async function readManifestFile(resource) { const manifestPath = "resources/public/" + resource; let content = await fs.readFile(manifestPath, { encoding: "utf8" }); @@ -260,6 +272,9 @@ const markedOptions = { marked.use(markedOptions); export async function compileTranslations() { + const outputDir = "resources/public/js/"; + await fs.mkdir(outputDir, { recursive: true }); + const langs = [ "ar", "ca", @@ -341,7 +356,6 @@ export async function compileTranslations() { } const esm = `export default ${JSON.stringify(result, null, 0)};\n`; - const outputDir = "resources/public/js/"; const outputFile = ph.join(outputDir, "translation." + lang + ".js"); await fs.writeFile(outputFile, esm); } @@ -499,17 +513,43 @@ export async function compileStyles() { export async function compileSvgSprites() { const start = process.hrtime(); log.info("init: compile svgsprite"); - await generateSvgSprites(); + let error = false; + + try { + await generateSvgSprites(); + } catch (cause) { + error = cause; + } + const end = process.hrtime(start); - log.info("done: compile svgsprite", `(${ppt(end)})`); + + if (error) { + log.error("error: compile svgsprite", `(${ppt(end)})`); + console.error(error); + } else { + log.info("done: compile svgsprite", `(${ppt(end)})`); + } } export async function compileTemplates() { const start = process.hrtime(); + let error = false; log.info("init: compile templates"); - await generateTemplates(); + + try { + await generateTemplates(); + } catch (cause) { + error = cause; + } + const end = process.hrtime(start); - log.info("done: compile templates", `(${ppt(end)})`); + + if (error) { + log.error("error: compile templates", `(${ppt(end)})`); + console.error(error); + } else { + log.info("done: compile templates", `(${ppt(end)})`); + } } export async function compilePolyfills() { diff --git a/frontend/scripts/_worker.js b/frontend/scripts/_worker.js index 80ba2f6bf6..c46b26993b 100644 --- a/frontend/scripts/_worker.js +++ b/frontend/scripts/_worker.js @@ -28,14 +28,12 @@ async function compileFile(path) { ], sourceMap: false, }); - // console.dir(result); resolve({ inputPath: path, outputPath: dest, css: result.css, }); } catch (cause) { - console.error(cause); reject(cause); } }); diff --git a/frontend/scripts/build-app-assets.js b/frontend/scripts/build-app-assets.js index 6ccc435839..e0fe385dce 100644 --- a/frontend/scripts/build-app-assets.js +++ b/frontend/scripts/build-app-assets.js @@ -1,5 +1,6 @@ import * as h from "./_helpers.js"; +await h.ensureDirectories(); await h.compileStyles(); await h.copyAssets(); await h.copyWasmPlayground(); diff --git a/frontend/scripts/watch.js b/frontend/scripts/watch.js index e2d9ff399d..38007d4454 100644 --- a/frontend/scripts/watch.js +++ b/frontend/scripts/watch.js @@ -12,19 +12,31 @@ let sass = null; async function compileSassAll() { const start = process.hrtime(); + let error = false; + log.info("init: compile styles"); - sass = await h.compileSassAll(worker); - let output = await h.concatSass(sass); - await fs.writeFile("./resources/public/css/main.css", output); + try { + sass = await h.compileSassAll(worker); + let output = await h.concatSass(sass); + await fs.writeFile("./resources/public/css/main.css", output); - if (isDebug) { - let debugCSS = await h.compileSassDebug(worker); - await fs.writeFile("./resources/public/css/debug.css", debugCSS); + if (isDebug) { + let debugCSS = await h.compileSassDebug(worker); + await fs.writeFile("./resources/public/css/debug.css", debugCSS); + } + } catch (cause) { + error = cause; } const end = process.hrtime(start); - log.info("done: compile styles", `(${ppt(end)})`); + + if (error) { + log.error("error: compile styles", `(${ppt(end)})`); + console.error(error); + } else { + log.info("done: compile styles", `(${ppt(end)})`); + } } async function compileSass(path) { @@ -48,7 +60,7 @@ async function compileSass(path) { } } -await fs.mkdir("./resources/public/css/", { recursive: true }); +await h.ensureDirectories(); await compileSassAll(); await h.copyAssets(); await h.copyWasmPlayground(); diff --git a/frontend/src/app/main/ui/dashboard/file_menu.cljs b/frontend/src/app/main/ui/dashboard/file_menu.cljs index 85b3dc2ac8..c2e825c2a5 100644 --- a/frontend/src/app/main/ui/dashboard/file_menu.cljs +++ b/frontend/src/app/main/ui/dashboard/file_menu.cljs @@ -193,11 +193,11 @@ restore-fn (fn [_] (st/emit! (dd/restore-files-immediately - (with-meta {:team-id (:id current-team) + (with-meta {:team-id current-team-id :ids (into #{} d/xf:map-id files)} {:on-success #(st/emit! (ntf/success (tr "dashboard.restore-success-notification" (:name file))) - (dd/fetch-projects (:id current-team)) - (dd/fetch-deleted-files (:id current-team))) + (dd/fetch-projects current-team-id) + (dd/fetch-deleted-files current-team-id)) :on-error #(st/emit! (ntf/error (tr "dashboard.errors.error-on-restore-file" (:name file))))})))) on-restore-immediately @@ -214,7 +214,7 @@ on-delete-immediately (fn [] (let [accept-fn #(st/emit! (dd/delete-files-immediately - {:team-id (:id current-team) + {:team-id current-team-id :ids (into #{} d/xf:map-id files)}))] (st/emit! (modal/show {:type :confirm @@ -244,8 +244,7 @@ (for [project current-projects] {:name (get-project-name project) :id (get-project-id project) - :handler (on-move (:id current-team) - (:id project))}) + :handler (on-move current-team-id (:id project))}) (when (seq other-teams) [{:name (tr "dashboard.move-to-other-team") :id "move-to-other-team"