From fd1b4448cb831907f96c2f88b924e6adf2a9fd93 Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Sat, 4 May 2019 19:50:25 -0400 Subject: [PATCH] implement saving and forking --- .../[id]/_components/AppControls/index.svelte | 55 +++++++++---------- site/src/routes/repl/[id]/index.json.js | 2 +- site/src/routes/repl/[id]/index.svelte | 3 +- site/src/routes/repl/create.json.js | 13 ++--- 4 files changed, 31 insertions(+), 42 deletions(-) diff --git a/site/src/routes/repl/[id]/_components/AppControls/index.svelte b/site/src/routes/repl/[id]/_components/AppControls/index.svelte index 3d63118eb6..21b06464f2 100644 --- a/site/src/routes/repl/[id]/_components/AppControls/index.svelte +++ b/site/src/routes/repl/[id]/_components/AppControls/index.svelte @@ -59,7 +59,10 @@ headers: { Authorization }, body: JSON.stringify({ name, - components + files: components.map(component => ({ + name: `${component.name}.${component.type}`, + source: component.source + })) }) }); @@ -107,16 +110,16 @@ const files = {}; const { components } = repl.toJSON(); - components.forEach(module => { - const text = module.source.trim(); - if (!text.length) return; // skip empty file - files[`${module.name}.${module.type}`] = text; - }); - const r = await fetch(`repl/${gist.uid}.json`, { method: 'PATCH', headers: { Authorization }, - body: JSON.stringify({ name, files }) + body: JSON.stringify({ + name, + files: components.map(component => ({ + name: `${component.name}.${component.type}`, + source: component.source + })) + }) }); if (r.status < 200 || r.status >= 300) { @@ -197,29 +200,21 @@ export default app;` }); - {#if $user} - - - - {/if} + - {#if gist} - - - - {/if} + {#if $user} diff --git a/site/src/routes/repl/[id]/index.json.js b/site/src/routes/repl/[id]/index.json.js index 77df324f19..0d15d1a193 100644 --- a/site/src/routes/repl/[id]/index.json.js +++ b/site/src/routes/repl/[id]/index.json.js @@ -113,7 +113,7 @@ export async function patch(req, res) { let k, cols=[], vals=[]; for (k in obj) { cols.push(k); - vals.push(obj[k]); + vals.push(k === 'files' ? JSON.stringify(obj[k]) : obj[k]); } const tmp = vals.map((x, i) => `$${i + 1}`).join(','); diff --git a/site/src/routes/repl/[id]/index.svelte b/site/src/routes/repl/[id]/index.svelte index ac9aa68e59..15071e74c6 100644 --- a/site/src/routes/repl/[id]/index.svelte +++ b/site/src/routes/repl/[id]/index.svelte @@ -80,10 +80,9 @@ }); function handle_fork(event) { - example = null; console.log('> handle_fork', event); gist = event.detail.gist; - gist_id = gist.uid; + id = gist.uid; } $: svelteUrl = process.browser && version === 'local' ? diff --git a/site/src/routes/repl/create.json.js b/site/src/routes/repl/create.json.js index d0abaf2db3..c9c6b759ec 100644 --- a/site/src/routes/repl/create.json.js +++ b/site/src/routes/repl/create.json.js @@ -8,21 +8,16 @@ export async function post(req, res) { if (!user) return; // response already sent try { - const { name, components } = await body(req); + const { name, files } = await body(req); - const files = {}; - components.forEach(component => { - const text = component.source.trim(); - if (!text.length) return; // skip empty file - files[`${component.name}.${component.type}`] = text; - }); + console.log({ name, files }); const [row] = await query(` insert into gists(user_id, name, files) - values ($1, $2, $3) returning *`, [user.id, name, files]); + values ($1, $2, $3) returning *`, [user.id, name, JSON.stringify(files)]); send(res, 201, { - uid: row.uid, + uid: row.uid.replace(/-/g, ''), name: row.name, files: row.files, owner: user.uid,