From b4b1daa1024fb2115db6a1bc1a8bd36b6cb3a14d Mon Sep 17 00:00:00 2001 From: CosmoX Date: Sun, 6 Sep 2026 15:02:53 -0700 Subject: [PATCH] Preserve new snippet drafts when creation fails (#669) * Preserve new snippet drafts when creation fails * Add explicit local draft recovery controls --- app/containers/gistEditorForm/index.js | 16 ++- app/containers/gistEditorForm/index.scss | 14 ++ app/containers/userPanel/index.js | 166 +++++++++++++++++++--- app/containers/userPanel/index.scss | 44 ++++++ app/index.js | 3 + app/renderFixtures.js | 16 +++ app/utilities/i18n/locales/en.js | 7 + app/utilities/i18n/locales/es.js | 7 + app/utilities/i18n/locales/fr.js | 7 + app/utilities/i18n/locales/ja.js | 7 + app/utilities/i18n/locales/ko.js | 7 + app/utilities/i18n/locales/tr.js | 7 + app/utilities/i18n/locales/zh-Hans.js | 7 + app/utilities/i18n/locales/zh-Hant.js | 7 + app/utilities/newGistDraft.js | 103 ++++++++++++++ docs/img/pr-669/draft-available.png | Bin 0 -> 78459 bytes docs/img/pr-669/draft-loaded.png | Bin 0 -> 77648 bytes tests/smoke/electron-render-smoke-main.js | 68 +++++++++ tests/smoke/electron-render-smoke.js | 5 + tests/utilities/i18n.test.js | 9 ++ tests/utilities/newGistDraft.test.js | 150 +++++++++++++++++++ 21 files changed, 626 insertions(+), 24 deletions(-) create mode 100644 app/utilities/newGistDraft.js create mode 100644 docs/img/pr-669/draft-available.png create mode 100644 docs/img/pr-669/draft-loaded.png create mode 100644 tests/utilities/newGistDraft.test.js diff --git a/app/containers/gistEditorForm/index.js b/app/containers/gistEditorForm/index.js index 295d7e2b..bc0f881a 100644 --- a/app/containers/gistEditorForm/index.js +++ b/app/containers/gistEditorForm/index.js @@ -169,7 +169,7 @@ class GistEditorForm extends Component { } render () { - const { handleCancel, formStyle } = this.props + const { footerHelper, handleCancel, formStyle } = this.props const { values, errors, touched, submitAttempted, submitting } = this.state return ( @@ -197,19 +197,25 @@ class GistEditorForm extends Component { }) }
+ { footerHelper && ( +
+ + { footerHelper } +
+ ) }
diff --git a/app/containers/gistEditorForm/index.scss b/app/containers/gistEditorForm/index.scss index cab3a1f4..2d6ececa 100644 --- a/app/containers/gistEditorForm/index.scss +++ b/app/containers/gistEditorForm/index.scss @@ -85,7 +85,21 @@ } .control-button-group { + align-items: center; + display: flex; height: 45px; + justify-content: flex-end; + } + + .gist-editor-footer-helper { + @extend .font-style-base; + align-items: center; + color: var(--text-secondary); + display: flex; + font-size: 12px; + gap: 5px; + margin-right: auto; + min-width: 0; } .gist-editor-customized-tag { diff --git a/app/containers/userPanel/index.js b/app/containers/userPanel/index.js index 6f85e7ba..7f51742a 100644 --- a/app/containers/userPanel/index.js +++ b/app/containers/userPanel/index.js @@ -8,7 +8,7 @@ import Modal from '../compatModal' import { notifySuccess, notifyFailure } from '../../utilities/notifier' import React, { Component } from 'react' import { subscribeIpc, unsubscribeIpc } from '../../utilities/ipcSubscriptions' -import { t } from '../../utilities/i18n' +import { getLocale, t } from '../../utilities/i18n' import { addLangPrefix as Prefixed, descriptionParser, @@ -28,6 +28,12 @@ import { CREATE_SINGLE_GIST, getGitHubApi, } from '../../utilities/githubApi' +import { + clearNewGistDraft, + createNewGistDraft, + createNewGistWithDraft, + loadNewGistDraft, +} from '../../utilities/newGistDraft' import './index.scss' @@ -53,6 +59,30 @@ const kIsPrivate = conf.get('snippet:newSnippetPrivate') const hideProfilePhoto = conf.get('userPanel:hideProfilePhoto') class UserPanel extends Component { + constructor (props) { + super(props) + const newGistDraft = loadNewGistDraft( + electronBridge.localStorage, + this.getUserLogin(props) + ) + this.newGistInitialData = this.createEmptyNewGistData() + this.state = { + newGistDraft, + newGistDraftLoaded: false + } + } + + getUserLogin (props = this.props) { + const profile = props.userSession && props.userSession.profile + return profile && profile.login + } + + createEmptyNewGistData () { + return createNewGistDraft({ + private: kIsPrivate + }) + } + componentDidMount () { this.ipcSubscriptions = [] subscribeIpc(ipcRenderer, this.ipcSubscriptions, 'new-gist-renderer', () => { @@ -74,6 +104,9 @@ class UserPanel extends Component { const isPublic = data.private === undefined ? true : !data.private const description = data.description.trim() const processedFiles = {} + const userLogin = this.getUserLogin() + + this.newGistInitialData = createNewGistDraft(data) data.gistFiles.forEach((file) => { processedFiles[file.filename.trim()] = { @@ -81,17 +114,49 @@ class UserPanel extends Component { } }) - return getGitHubApi(CREATE_SINGLE_GIST)(this.props.accessToken, description, processedFiles, isPublic) - .catch((err) => { - notifyFailure(t('notification.gistCreationFailed')) - logger.error(JSON.stringify(err)) - }) - .then((response) => { - this.updateGistsStoreWithNewGist(response) - }) - .finally(() => { - this.closeGistEditorModal() + return createNewGistWithDraft({ + storage: electronBridge.localStorage, + userLogin, + data, + createGist: () => getGitHubApi(CREATE_SINGLE_GIST)( + this.props.accessToken, + description, + processedFiles, + isPublic + ) + }).then((result) => { + if (result.status === 'failed') { + notifyFailure( + t('notification.gistCreationFailed'), + result.draftWrite && result.draftWrite.status ? t('notification.gistDraftSaved') : '' + ) + logger.error(result.error && result.error.message + ? result.error.message + : String(result.error)) + if (result.draftWrite && result.draftWrite.status) { + this.setState({ + newGistDraft: result.draftWrite.data, + newGistDraftLoaded: true + }) + } + return + } + + this.updateGistsStoreWithNewGist(result.gistDetails) + this.newGistInitialData = this.createEmptyNewGistData() + + const draftClear = clearNewGistDraft(electronBridge.localStorage, userLogin) + if (!draftClear || !draftClear.status) { + logger.error('Failed to clear the saved new snippet draft') + } + + this.setState({ + newGistDraft: null, + newGistDraftLoaded: false }) + + this.closeGistEditorModal() + }) } updateGistsStoreWithNewGist (gistDetails) { @@ -159,22 +224,84 @@ class UserPanel extends Component { } renderGistEditorModalBody () { - const initialData = { - description: '', - private: kIsPrivate, - gists: [ - { filename: '', content: '' } - ] - } + const showDraftReplacementWarning = Boolean( + this.state.newGistDraft && !this.state.newGistDraftLoaded + ) + return ( ) } + formatNewGistDraftCreatedAt () { + return new Intl.DateTimeFormat(getLocale(), { + dateStyle: 'medium', + timeStyle: 'short' + }).format(new Date(this.state.newGistDraft.createdAt)) + } + + handleLoadNewGistDraft () { + this.newGistInitialData = createNewGistDraft(this.state.newGistDraft) + this.setState({ newGistDraftLoaded: true }) + } + + handleDropNewGistDraft () { + const draftClear = clearNewGistDraft( + electronBridge.localStorage, + this.getUserLogin() + ) + if (!draftClear || !draftClear.status) { + logger.error('Failed to drop the saved new snippet draft') + return + } + + if (this.state.newGistDraftLoaded) { + this.newGistInitialData = this.createEmptyNewGistData() + } + this.setState({ + newGistDraft: null, + newGistDraftLoaded: false + }) + } + + renderNewGistDraftCallout () { + if (!this.state.newGistDraft) return null + + return ( +
+ +
+ { this.state.newGistDraftLoaded + ? t('editor.localDraftLoaded') + : t('editor.localDraftAvailable') } + { t('editor.localDraftCreatedAt', { + timestamp: this.formatNewGistDraftCreatedAt() + }) } +
+
+ { !this.state.newGistDraftLoaded && ( + + ) } + +
+
+ ) + } + renderGistEditorModal () { return ( { t('userPanel.new') } + { this.renderNewGistDraftCallout() } { this.renderGistEditorModalBody.bind(this)() } diff --git a/app/containers/userPanel/index.scss b/app/containers/userPanel/index.scss index c004f087..5a509676 100644 --- a/app/containers/userPanel/index.scss +++ b/app/containers/userPanel/index.scss @@ -69,6 +69,50 @@ .new-modal { width: 98vw; + + .new-gist-draft-callout { + align-items: center; + background: var(--bg-primary); + border: 1px solid var(--border-color); + border-radius: 3px; + color: var(--text-primary); + display: flex; + margin: 0 5px 15px; + min-height: 64px; + padding: 10px 14px; + } + + .new-gist-draft-icon { + font-size: 26px; + line-height: 1; + margin-right: 12px; + } + + .new-gist-draft-summary { + display: flex; + flex: 1 1 auto; + flex-direction: column; + font-size: 13px; + line-height: 1.5; + } + + .new-gist-draft-actions { + display: flex; + flex: 0 0 auto; + gap: 20px; + + button { + background: transparent; + border: 0; + color: #4078C0; + cursor: pointer; + padding: 5px; + } + + .drop-new-gist-draft { + color: #B94A48; + } + } } /* Global setting affecting all dialogs (NEW/EDIT) if not overwritten. */ diff --git a/app/index.js b/app/index.js index deb97d00..9a011b13 100644 --- a/app/index.js +++ b/app/index.js @@ -904,6 +904,9 @@ const renderFixture = getRenderFixture(getRenderFixtureName()) if (renderFixture) { logger.info(`[render-fixture] Rendering ${renderFixture.name} with mock state`) SearchIndex.resetFuseIndex(renderFixture.searchIndexRecords) + Object.entries(renderFixture.localStorage || {}).forEach(([key, value]) => { + electronBridge.localStorage.set(key, value) + }) } const reduxStore = renderFixture diff --git a/app/renderFixtures.js b/app/renderFixtures.js index 71e329b7..f71a486b 100644 --- a/app/renderFixtures.js +++ b/app/renderFixtures.js @@ -1,5 +1,6 @@ import { addLangPrefix as Prefixed } from './utilities/parser' import leptonLogoImage from './containers/aboutPage/logo-light.webp?inline' +import { getNewGistDraftStorageKey } from './utilities/newGistDraft' import SearchIndex from './utilities/search' const FIXTURE_USER = { @@ -295,6 +296,8 @@ function getFixtureOverrides (name) { return { logoutModalStatus: 'ON' } case 'new': return { gistNewModalStatus: 'ON' } + case 'new-draft': + return { gistNewModalStatus: 'ON' } case 'pinned-tags': return { pinnedTagsModalStatus: 'ON' } case 'php-html': @@ -403,6 +406,19 @@ export function getRenderFixture (name) { return { initialSearchQuery, + localStorage: name === 'new-draft' + ? { + [getNewGistDraftStorageKey(FIXTURE_USER.login)]: { + createdAt: '2026-09-06T21:35:00.000Z', + description: 'Recovered API helper', + private: true, + gists: [{ + filename: 'recovered.js', + content: 'const recovered = true' + }] + } + } + : null, name, searchIndexRecords, state: Object.assign({}, getBaseState(), stateOverrides) diff --git a/app/utilities/i18n/locales/en.js b/app/utilities/i18n/locales/en.js index cb5ef883..24f3dd09 100644 --- a/app/utilities/i18n/locales/en.js +++ b/app/utilities/i18n/locales/en.js @@ -33,8 +33,14 @@ module.exports = { addFile: '#add file', cancel: 'Cancel', descriptionPlaceholder: '[title] description #tag1 #tag2', + dropLocalDraft: 'Drop draft', filenamePlaceholder: 'file name... (e.g. snippet.js)', invalidFilename: 'invalid filename', + loadLocalDraft: 'Load draft', + localDraftAvailable: 'Local draft available', + localDraftCreatedAt: 'Created {{timestamp}}', + localDraftLoaded: 'Local draft loaded', + localDraftSubmitWarning: 'Submitting without loading the local draft will discard it.', removeFile: '#remove', required: 'required', secret: 'secret', @@ -105,6 +111,7 @@ module.exports = { deletionFailed: 'Deletion failed', gistCreated: 'Snippet created', gistCreationFailed: 'Snippet creation failed', + gistDraftSaved: 'Your draft was saved locally. Retry when your connection returns.', gistDeleted: 'The snippet has been deleted', gistUpdateFailed: 'Snippet update failed', gistUpdated: 'Snippet updated', diff --git a/app/utilities/i18n/locales/es.js b/app/utilities/i18n/locales/es.js index 59adef47..838602be 100644 --- a/app/utilities/i18n/locales/es.js +++ b/app/utilities/i18n/locales/es.js @@ -33,8 +33,14 @@ module.exports = { addFile: '#agregar archivo', cancel: 'Cancelar', descriptionPlaceholder: '[titulo] descripcion #etiqueta1 #etiqueta2', + dropLocalDraft: 'Descartar borrador', filenamePlaceholder: 'nombre de archivo... (ej. snippet.js)', invalidFilename: 'nombre de archivo invalido', + loadLocalDraft: 'Cargar borrador', + localDraftAvailable: 'Borrador local disponible', + localDraftCreatedAt: 'Creado {{timestamp}}', + localDraftLoaded: 'Borrador local cargado', + localDraftSubmitWarning: 'Enviar sin cargar el borrador local lo descartara.', removeFile: '#eliminar', required: 'obligatorio', secret: 'secreto', @@ -105,6 +111,7 @@ module.exports = { deletionFailed: 'No se pudo eliminar', gistCreated: 'Snippet creado', gistCreationFailed: 'No se pudo crear el snippet', + gistDraftSaved: 'Tu borrador se guardo localmente. Vuelve a intentarlo cuando se restablezca la conexion.', gistDeleted: 'El snippet se elimino', gistUpdateFailed: 'No se pudo actualizar el snippet', gistUpdated: 'Snippet actualizado', diff --git a/app/utilities/i18n/locales/fr.js b/app/utilities/i18n/locales/fr.js index 6c64bb67..dac13b08 100644 --- a/app/utilities/i18n/locales/fr.js +++ b/app/utilities/i18n/locales/fr.js @@ -33,8 +33,14 @@ module.exports = { addFile: '#ajouter fichier', cancel: 'Annuler', descriptionPlaceholder: '[titre] description #tag1 #tag2', + dropLocalDraft: 'Supprimer le brouillon', filenamePlaceholder: 'nom du fichier... (ex. snippet.js)', invalidFilename: 'nom de fichier invalide', + loadLocalDraft: 'Charger le brouillon', + localDraftAvailable: 'Brouillon local disponible', + localDraftCreatedAt: 'Cree le {{timestamp}}', + localDraftLoaded: 'Brouillon local charge', + localDraftSubmitWarning: 'Envoyer sans charger le brouillon local le supprimera.', removeFile: '#retirer', required: 'obligatoire', secret: 'prive', @@ -105,6 +111,7 @@ module.exports = { deletionFailed: 'Suppression echouee', gistCreated: 'Extrait cree', gistCreationFailed: 'Creation de l extrait echouee', + gistDraftSaved: 'Votre brouillon a ete enregistre localement. Reessayez lorsque votre connexion sera retablie.', gistDeleted: 'L extrait a ete supprime', gistUpdateFailed: 'Mise a jour de l extrait echouee', gistUpdated: 'Extrait mis a jour', diff --git a/app/utilities/i18n/locales/ja.js b/app/utilities/i18n/locales/ja.js index ef7f3720..778b794f 100644 --- a/app/utilities/i18n/locales/ja.js +++ b/app/utilities/i18n/locales/ja.js @@ -33,8 +33,14 @@ module.exports = { addFile: '#ファイルを追加', cancel: 'キャンセル', descriptionPlaceholder: '[タイトル] 説明 #タグ1 #タグ2', + dropLocalDraft: '下書きを破棄', filenamePlaceholder: 'ファイル名...(例: snippet.js)', invalidFilename: '無効なファイル名', + loadLocalDraft: '下書きを読み込む', + localDraftAvailable: 'ローカル下書きがあります', + localDraftCreatedAt: '作成日時: {{timestamp}}', + localDraftLoaded: 'ローカル下書きを読み込みました', + localDraftSubmitWarning: 'ローカル下書きを読み込まずに送信すると、その下書きは破棄されます。', removeFile: '#削除', required: '必須', secret: 'シークレット', @@ -105,6 +111,7 @@ module.exports = { deletionFailed: '削除に失敗しました', gistCreated: 'スニペットを作成しました', gistCreationFailed: 'スニペットの作成に失敗しました', + gistDraftSaved: '下書きをローカルに保存しました。接続が復旧したら再試行してください。', gistDeleted: 'スニペットを削除しました', gistUpdateFailed: 'スニペットの更新に失敗しました', gistUpdated: 'スニペットを更新しました', diff --git a/app/utilities/i18n/locales/ko.js b/app/utilities/i18n/locales/ko.js index d8d4da8a..6215c8a9 100644 --- a/app/utilities/i18n/locales/ko.js +++ b/app/utilities/i18n/locales/ko.js @@ -33,8 +33,14 @@ module.exports = { addFile: '#파일 추가', cancel: '취소', descriptionPlaceholder: '[제목] 설명 #태그1 #태그2', + dropLocalDraft: '초안 버리기', filenamePlaceholder: '파일 이름... (예: snippet.js)', invalidFilename: '잘못된 파일 이름', + loadLocalDraft: '초안 불러오기', + localDraftAvailable: '로컬 초안 사용 가능', + localDraftCreatedAt: '{{timestamp}}에 생성됨', + localDraftLoaded: '로컬 초안을 불러왔습니다', + localDraftSubmitWarning: '로컬 초안을 불러오지 않고 제출하면 해당 초안이 삭제됩니다.', removeFile: '#제거', required: '필수', secret: '비공개', @@ -105,6 +111,7 @@ module.exports = { deletionFailed: '삭제 실패', gistCreated: '스니펫이 생성되었습니다', gistCreationFailed: '스니펫 생성 실패', + gistDraftSaved: '초안이 로컬에 저장되었습니다. 연결이 복구되면 다시 시도하세요.', gistDeleted: '스니펫이 삭제되었습니다', gistUpdateFailed: '스니펫 업데이트 실패', gistUpdated: '스니펫이 업데이트되었습니다', diff --git a/app/utilities/i18n/locales/tr.js b/app/utilities/i18n/locales/tr.js index 5f89716f..f02d5e37 100644 --- a/app/utilities/i18n/locales/tr.js +++ b/app/utilities/i18n/locales/tr.js @@ -33,8 +33,14 @@ module.exports = { addFile: '#dosya ekle', cancel: 'İptal', descriptionPlaceholder: '[başlık] açıklama #etiket1 #etiket2', + dropLocalDraft: 'Taslağı sil', filenamePlaceholder: 'dosya adı... (örn. snippet.js)', invalidFilename: 'geçersiz dosya adı', + loadLocalDraft: 'Taslağı yükle', + localDraftAvailable: 'Yerel taslak mevcut', + localDraftCreatedAt: '{{timestamp}} tarihinde oluşturuldu', + localDraftLoaded: 'Yerel taslak yüklendi', + localDraftSubmitWarning: 'Yerel taslağı yüklemeden gönderirseniz taslak silinir.', removeFile: '#kaldır', required: 'gerekli', secret: 'gizli', @@ -105,6 +111,7 @@ module.exports = { deletionFailed: 'Silme başarısız', gistCreated: 'Kod parçası oluşturuldu', gistCreationFailed: 'Kod parçası oluşturulamadı', + gistDraftSaved: 'Taslağınız yerel olarak kaydedildi. Bağlantınız geri geldiğinde tekrar deneyin.', gistDeleted: 'Kod parçası silindi', gistUpdateFailed: 'Kod parçası güncellenemedi', gistUpdated: 'Kod parçası güncellendi', diff --git a/app/utilities/i18n/locales/zh-Hans.js b/app/utilities/i18n/locales/zh-Hans.js index 4dc7404b..d5ee5296 100644 --- a/app/utilities/i18n/locales/zh-Hans.js +++ b/app/utilities/i18n/locales/zh-Hans.js @@ -33,8 +33,14 @@ module.exports = { addFile: '#添加文件', cancel: '取消', descriptionPlaceholder: '[标题] 描述 #标签1 #标签2', + dropLocalDraft: '丢弃草稿', filenamePlaceholder: '文件名...(例如 snippet.js)', invalidFilename: '无效文件名', + loadLocalDraft: '加载草稿', + localDraftAvailable: '有本地草稿', + localDraftCreatedAt: '创建于 {{timestamp}}', + localDraftLoaded: '已加载本地草稿', + localDraftSubmitWarning: '不加载本地草稿就提交会将其丢弃。', removeFile: '#移除', required: '必填', secret: '私密', @@ -105,6 +111,7 @@ module.exports = { deletionFailed: '删除失败', gistCreated: '代码片段已创建', gistCreationFailed: '代码片段创建失败', + gistDraftSaved: '草稿已保存在本地。网络恢复后请重试。', gistDeleted: '代码片段已删除', gistUpdateFailed: '代码片段更新失败', gistUpdated: '代码片段已更新', diff --git a/app/utilities/i18n/locales/zh-Hant.js b/app/utilities/i18n/locales/zh-Hant.js index 89ad2aa8..5cbb053d 100644 --- a/app/utilities/i18n/locales/zh-Hant.js +++ b/app/utilities/i18n/locales/zh-Hant.js @@ -33,8 +33,14 @@ module.exports = { addFile: '#新增檔案', cancel: '取消', descriptionPlaceholder: '[標題] 描述 #標籤1 #標籤2', + dropLocalDraft: '捨棄草稿', filenamePlaceholder: '檔案名稱...(例如 snippet.js)', invalidFilename: '無效的檔案名稱', + loadLocalDraft: '載入草稿', + localDraftAvailable: '有本機草稿', + localDraftCreatedAt: '建立於 {{timestamp}}', + localDraftLoaded: '已載入本機草稿', + localDraftSubmitWarning: '未載入本機草稿就提交會將其捨棄。', removeFile: '#移除', required: '必填', secret: '私密', @@ -105,6 +111,7 @@ module.exports = { deletionFailed: '刪除失敗', gistCreated: '程式碼片段已建立', gistCreationFailed: '程式碼片段建立失敗', + gistDraftSaved: '草稿已儲存在本機。網路恢復後請重試。', gistDeleted: '程式碼片段已刪除', gistUpdateFailed: '程式碼片段更新失敗', gistUpdated: '程式碼片段已更新', diff --git a/app/utilities/newGistDraft.js b/app/utilities/newGistDraft.js new file mode 100644 index 00000000..a27db073 --- /dev/null +++ b/app/utilities/newGistDraft.js @@ -0,0 +1,103 @@ +const NEW_GIST_DRAFT_STORAGE_PREFIX = 'new-gist-draft' + +function createStorageFailure (error) { + return { + status: false, + error + } +} + +export function getNewGistDraftStorageKey (userLogin) { + const owner = typeof userLogin === 'string' && userLogin.trim() + ? encodeURIComponent(userLogin.trim()) + : 'anonymous' + + return `${NEW_GIST_DRAFT_STORAGE_PREFIX}-${owner}` +} + +export function createNewGistDraft (data = {}) { + const sourceFiles = Array.isArray(data.gistFiles) + ? data.gistFiles + : data.gists + const gists = Array.isArray(sourceFiles) + ? sourceFiles.map(file => ({ + filename: file && typeof file.filename === 'string' ? file.filename : '', + content: file && typeof file.content === 'string' ? file.content : '' + })) + : [] + + const draft = { + description: typeof data.description === 'string' ? data.description : '', + private: Boolean(data.private), + gists: gists.length ? gists : [{ filename: '', content: '' }] + } + + if (typeof data.createdAt === 'string' && !Number.isNaN(Date.parse(data.createdAt))) { + draft.createdAt = data.createdAt + } + + return draft +} + +function isNewGistDraft (draft) { + return Boolean( + draft && + typeof draft === 'object' && + typeof draft.description === 'string' && + typeof draft.private === 'boolean' && + typeof draft.createdAt === 'string' && + !Number.isNaN(Date.parse(draft.createdAt)) && + Array.isArray(draft.gists) && + draft.gists.length && + draft.gists.every(file => + file && + typeof file.filename === 'string' && + typeof file.content === 'string' + ) + ) +} + +export function loadNewGistDraft (storage, userLogin) { + try { + const result = storage.get(getNewGistDraftStorageKey(userLogin)) + if (!result || !result.status || !isNewGistDraft(result.data)) return null + return createNewGistDraft(result.data) + } catch { + return null + } +} + +export function saveNewGistDraft (storage, userLogin, data, createdAt = new Date().toISOString()) { + try { + return storage.set( + getNewGistDraftStorageKey(userLogin), + createNewGistDraft(Object.assign({}, data, { createdAt })) + ) + } catch (error) { + return createStorageFailure(error) + } +} + +export function createNewGistWithDraft ({ storage, userLogin, data, createGist }) { + const draftWrite = saveNewGistDraft(storage, userLogin, data) + + return Promise.resolve() + .then(createGist) + .then(gistDetails => ({ + status: 'created', + gistDetails, + draftWrite + }), error => ({ + status: 'failed', + error, + draftWrite + })) +} + +export function clearNewGistDraft (storage, userLogin) { + try { + return storage.set(getNewGistDraftStorageKey(userLogin), null) + } catch (error) { + return createStorageFailure(error) + } +} diff --git a/docs/img/pr-669/draft-available.png b/docs/img/pr-669/draft-available.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb2766ff38bdec21befd3fd559c54c0f7272c9f GIT binary patch literal 78459 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 literal 0 HcmV?d00001 diff --git a/docs/img/pr-669/draft-loaded.png b/docs/img/pr-669/draft-loaded.png new file mode 100644 index 0000000000000000000000000000000000000000..fc348ec23ba36c1aeca6b35b036fc5e556f0454b GIT binary patch literal 77648 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 eY-JsQwy^0{MIpCV(UGj*x~impF { + const description = document.querySelector('.gist-editor-input-area') + const loadButton = Array.from(document.querySelectorAll('.new-gist-draft-actions button')) + .find(button => button.textContent.trim() === 'Load draft') + const initialState = { + description: description ? description.value : null, + hasHelper: document.body.innerText.includes('Submitting without loading the local draft will discard it.') + } + + loadButton.click() + setTimeout(() => { + const loadedDescription = document.querySelector('.gist-editor-input-area') + const loadedFilename = document.querySelector('.gist-editor-filename-area') + const editor = document.querySelector('.CodeMirror') + const loadedState = { + content: editor && editor.CodeMirror ? editor.CodeMirror.getValue() : null, + description: loadedDescription ? loadedDescription.value : null, + filename: loadedFilename ? loadedFilename.value : null, + hasHelper: document.body.innerText.includes('Submitting without loading the local draft will discard it.'), + hasLoadedStatus: document.body.innerText.includes('Local draft loaded') + } + resolve({ initialState, loadedState }) + }, 100) + }) + `, true) + + if ( + recoveryState.initialState.description !== '' || + !recoveryState.initialState.hasHelper || + recoveryState.loadedState.description !== 'Recovered API helper' || + recoveryState.loadedState.filename !== 'recovered.js' || + recoveryState.loadedState.content !== 'const recovered = true' || + recoveryState.loadedState.hasHelper || + !recoveryState.loadedState.hasLoadedStatus + ) { + throw new Error(`Expected local draft load/drop flow to preserve normal editor content: ${JSON.stringify(recoveryState)}`) + } + + await captureScreenshot(window, 'electron-render-new-draft-loaded.png') + + const droppedState = await window.webContents.executeJavaScript(` + new Promise(resolve => { + const dropButton = Array.from(document.querySelectorAll('.new-gist-draft-actions button')) + .find(button => button.textContent.trim() === 'Drop draft') + dropButton.click() + setTimeout(() => { + const description = document.querySelector('.gist-editor-input-area') + resolve({ + description: description ? description.value : null, + hasCallout: Boolean(document.querySelector('.new-gist-draft-callout')) + }) + }, 100) + }) + `, true) + + if (droppedState.description !== '' || droppedState.hasCallout) { + throw new Error(`Expected dropping a loaded local draft to reset the editor: ${JSON.stringify(droppedState)}`) + } +} + async function main () { let window @@ -784,6 +848,10 @@ async function main () { assertFixtureRendererState(await getRendererState(window)) await assertFixtureLoginModeSwitch(window) await assertFixturePageFind(window) + if (process.env.LEPTON_RENDER_FIXTURE === 'new-draft') { + await captureScreenshot(window, 'electron-render-new-draft-before-actions.png') + } + await assertFixtureNewDraftRecovery(window) await captureScreenshot(window, `electron-render-${process.env.LEPTON_RENDER_FIXTURE}-success.png`) console.log(`electron render fixture smoke test passed: ${process.env.LEPTON_RENDER_FIXTURE}`) } else { diff --git a/tests/smoke/electron-render-smoke.js b/tests/smoke/electron-render-smoke.js index 8edaa622..00919c6d 100644 --- a/tests/smoke/electron-render-smoke.js +++ b/tests/smoke/electron-render-smoke.js @@ -48,6 +48,11 @@ const RENDER_FIXTURES = [ selector: '.modal .gist-editor-form .CodeMirror', text: 'New' }, + { + name: 'new-draft', + selector: '.new-gist-draft-callout', + text: 'Local draft available|Created Sep 6, 2026|Load draft|Drop draft|Submitting without loading the local draft will discard it.' + }, { name: 'about', selector: '.about-modal .modal-title', diff --git a/tests/utilities/i18n.test.js b/tests/utilities/i18n.test.js index d3e662de..ba091483 100644 --- a/tests/utilities/i18n.test.js +++ b/tests/utilities/i18n.test.js @@ -111,6 +111,15 @@ describe('i18n utilities', () => { expect(t('menu.submitGist')).toBe('Submit Snippet') expect(t('menu.syncGist')).toBe('Sync Snippet') expect(t('notification.gistCreated')).toBe('Snippet created') + expect(t('notification.gistDraftSaved')).toBe( + 'Your draft was saved locally. Retry when your connection returns.' + ) + expect(t('editor.localDraftCreatedAt', { timestamp: 'Sep 6, 2026, 2:35 PM' })).toBe( + 'Created Sep 6, 2026, 2:35 PM' + ) + expect(t('editor.localDraftSubmitWarning')).toBe( + 'Submitting without loading the local draft will discard it.' + ) expect(t('snippet.deleteConfirmTitle')).toBe('Delete the snippet?') }) diff --git a/tests/utilities/newGistDraft.test.js b/tests/utilities/newGistDraft.test.js new file mode 100644 index 00000000..c26b2114 --- /dev/null +++ b/tests/utilities/newGistDraft.test.js @@ -0,0 +1,150 @@ +import { describe, expect, it, vi } from 'vitest' + +import { + clearNewGistDraft, + createNewGistDraft, + createNewGistWithDraft, + getNewGistDraftStorageKey, + loadNewGistDraft, + saveNewGistDraft +} from '../../app/utilities/newGistDraft' + +function createMemoryStorage (initialValues = {}) { + const values = Object.assign({}, initialValues) + + return { + values, + get: vi.fn(key => Object.prototype.hasOwnProperty.call(values, key) + ? { status: true, data: values[key] } + : { status: false }), + set: vi.fn((key, value) => { + values[key] = value + return { status: true, data: value } + }) + } +} + +describe('new snippet draft storage', () => { + const createdAt = '2026-09-06T21:35:00.000Z' + + it('normalizes editor submissions into restorable initial data', () => { + expect(createNewGistDraft({ + description: 'network-safe snippet', + private: true, + gistFiles: [ + { filename: 'app.js', content: 'console.log(1)', _editorId: 'editor-1' } + ] + })).toEqual({ + description: 'network-safe snippet', + private: true, + gists: [ + { filename: 'app.js', content: 'console.log(1)' } + ] + }) + }) + + it('scopes saved drafts to the signed-in user', () => { + const storage = createMemoryStorage() + const draft = { + description: 'octocat draft', + private: false, + gistFiles: [{ filename: 'draft.md', content: '# Draft' }] + } + + expect(saveNewGistDraft(storage, 'octocat', draft, createdAt).status).toBe(true) + expect(loadNewGistDraft(storage, 'other-user')).toBeNull() + expect(loadNewGistDraft(storage, 'octocat')).toEqual({ + description: 'octocat draft', + private: false, + createdAt, + gists: [{ filename: 'draft.md', content: '# Draft' }] + }) + }) + + it('clears a draft only after the caller completes creation', () => { + const storage = createMemoryStorage() + const key = getNewGistDraftStorageKey('octocat') + + saveNewGistDraft(storage, 'octocat', { + description: 'saved before request', + gistFiles: [{ filename: 'draft.txt', content: 'keep me' }] + }, createdAt) + + expect(storage.values[key]).toEqual(expect.objectContaining({ + description: 'saved before request' + })) + + expect(clearNewGistDraft(storage, 'octocat').status).toBe(true) + expect(storage.values[key]).toBeNull() + expect(loadNewGistDraft(storage, 'octocat')).toBeNull() + }) + + it('retains the local draft when creation fails', async () => { + const storage = createMemoryStorage() + const createGist = vi.fn().mockRejectedValue(new Error('offline')) + + const result = await createNewGistWithDraft({ + storage, + userLogin: 'octocat', + data: { + description: 'saved before request', + gistFiles: [{ filename: 'draft.txt', content: 'keep me' }] + }, + createGist + }) + + expect(result).toMatchObject({ + status: 'failed', + error: expect.objectContaining({ message: 'offline' }), + draftWrite: { status: true } + }) + expect(loadNewGistDraft(storage, 'octocat')).toEqual({ + description: 'saved before request', + private: false, + createdAt: expect.any(String), + gists: [{ filename: 'draft.txt', content: 'keep me' }] + }) + }) + + it('returns the created gist while leaving draft cleanup to the success handler', async () => { + const storage = createMemoryStorage() + const gistDetails = { id: 'gist-1' } + + const result = await createNewGistWithDraft({ + storage, + userLogin: 'octocat', + data: { + description: 'created draft', + gistFiles: [{ filename: 'created.txt', content: 'created' }] + }, + createGist: () => Promise.resolve(gistDetails) + }) + + expect(result).toMatchObject({ + status: 'created', + gistDetails, + draftWrite: { status: true } + }) + expect(loadNewGistDraft(storage, 'octocat')).not.toBeNull() + }) + + it('ignores malformed drafts and reports storage write failures', () => { + const key = getNewGistDraftStorageKey('octocat') + const malformedStorage = createMemoryStorage({ + [key]: { description: 'missing files' } + }) + const failingStorage = { + set: () => { throw new Error('disk full') } + } + + expect(loadNewGistDraft(malformedStorage, 'octocat')).toBeNull() + expect(saveNewGistDraft(failingStorage, 'octocat', {})).toMatchObject({ + status: false, + error: expect.objectContaining({ message: 'disk full' }) + }) + expect(clearNewGistDraft(failingStorage, 'octocat')).toMatchObject({ + status: false, + error: expect.objectContaining({ message: 'disk full' }) + }) + }) +})