diff --git a/assets/icons/pageX_stroke2_corner0_rounded_large.svg b/assets/icons/pageX_stroke2_corner0_rounded_large.svg
new file mode 100644
index 0000000000..4a319a8da4
--- /dev/null
+++ b/assets/icons/pageX_stroke2_corner0_rounded_large.svg
@@ -0,0 +1 @@
+
diff --git a/src/components/icons/PageX.tsx b/src/components/icons/PageX.tsx
new file mode 100644
index 0000000000..90c3c81ca4
--- /dev/null
+++ b/src/components/icons/PageX.tsx
@@ -0,0 +1,6 @@
+import {createSinglePathSVG} from './TEMPLATE'
+
+export const PageX_Stroke2_Corner0_Rounded_Large = createSinglePathSVG({
+ viewBox: '0 0 64 64',
+ path: 'M32.457 7c1.68 0 3.29.668 4.478 1.855L49.813 21.73a6.33 6.33 0 0 1 1.854 4.479v24.458A6.333 6.333 0 0 1 45.333 57H18.666a6.334 6.334 0 0 1-6.333-6.333V13.333A6.334 6.334 0 0 1 18.666 7h13.791ZM18.666 9a4.334 4.334 0 0 0-4.333 4.333v37.334A4.334 4.334 0 0 0 18.666 55h26.667a4.333 4.333 0 0 0 4.333-4.333V26.209c0-.418-.061-.829-.177-1.223a1 1 0 0 1-.155.014H40a6.334 6.334 0 0 1-6.325-6.008l-.008-.326V9.333q0-.08.013-.156A4.3 4.3 0 0 0 32.457 9H18.666Zm18.627 22.293a1 1 0 1 1 1.414 1.414L33.414 38l5.293 5.293a1 1 0 1 1-1.414 1.414L32 39.414l-5.293 5.293a1 1 0 1 1-1.414-1.414L30.586 38l-5.293-5.293a1 1 0 1 1 1.414-1.414L32 36.586l5.293-5.293Zm-1.626-12.627.006.224A4.333 4.333 0 0 0 40 23h8.253L35.667 10.414v8.252Z',
+})
diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx
index 0e0c773e75..795ba9c9bf 100644
--- a/src/view/com/composer/Composer.tsx
+++ b/src/view/com/composer/Composer.tsx
@@ -330,7 +330,7 @@ export const ComposePost = ({
// Load media from local storage
const loadedMedia = await loadDraftMedia(currentDid, draft)
- // Dispatch restore action
+ // Dispatch restore action (this also sets draftId in state)
composerDispatch({
type: 'restore_from_draft',
draft,
@@ -352,6 +352,7 @@ export const ComposePost = ({
await saveDraft({
composerState,
replyTo,
+ existingDraftId: composerState.draftId,
})
onClose()
} catch (e) {
@@ -365,6 +366,7 @@ export const ComposePost = ({
await saveDraft({
composerState,
replyTo,
+ existingDraftId: composerState.draftId,
})
}, [saveDraft, composerState, replyTo])
diff --git a/src/view/com/composer/drafts/DraftsButton.tsx b/src/view/com/composer/drafts/DraftsButton.tsx
index c1e3518322..894831edb6 100644
--- a/src/view/com/composer/drafts/DraftsButton.tsx
+++ b/src/view/com/composer/drafts/DraftsButton.tsx
@@ -74,12 +74,12 @@ export function DraftsButton({
diff --git a/src/view/com/composer/drafts/DraftsListDialog.tsx b/src/view/com/composer/drafts/DraftsListDialog.tsx
index 1c9707431f..c3d8285f13 100644
--- a/src/view/com/composer/drafts/DraftsListDialog.tsx
+++ b/src/view/com/composer/drafts/DraftsListDialog.tsx
@@ -11,11 +11,11 @@ import {
useLoadDraft,
} from '#/state/drafts'
import {atoms as a, useTheme} from '#/alf'
-import {Button, ButtonIcon} from '#/components/Button'
+import {Button, ButtonText} from '#/components/Button'
import * as Dialog from '#/components/Dialog'
-import {ArrowLeft_Stroke2_Corner0_Rounded as ArrowLeftIcon} from '#/components/icons/Arrow'
+import {PageX_Stroke2_Corner0_Rounded_Large} from '#/components/icons/PageX'
import {Loader} from '#/components/Loader'
-import {Text} from '#/components/Typography'
+import {EmptyState} from '../../util/EmptyState'
import {DraftItem} from './DraftItem'
export function DraftsListDialog({
@@ -57,9 +57,10 @@ export function DraftsListDialog({
onPress={() => control.close()}
size="small"
color="primary"
- variant="ghost"
- shape="round">
-
+ variant="ghost">
+
+ Back
+
),
[control, _],
@@ -98,17 +99,15 @@ export function DraftsListDialog({
)
}
return (
-
-
- No drafts saved
-
-
+
)
- }, [isLoading, t.atoms.text_contrast_medium])
+ }, [isLoading, _])
return (
-
-
+
}
- style={[a.px_lg]}
+ style={t.atoms.bg_contrast_25}
/>
)
diff --git a/src/view/com/composer/state/composer.ts b/src/view/com/composer/state/composer.ts
index ef71f43f64..aa776dab98 100644
--- a/src/view/com/composer/state/composer.ts
+++ b/src/view/com/composer/state/composer.ts
@@ -102,6 +102,8 @@ export type ComposerState = {
thread: ThreadDraft
activePostIndex: number
mutableNeedsFocusActive: boolean
+ /** ID of the draft being edited, if any. Used to update existing draft on save. */
+ draftId?: string
}
export type ComposerAction =
@@ -299,6 +301,7 @@ export function composerReducer(
return {
activePostIndex: 0,
mutableNeedsFocusActive: true,
+ draftId: draft.id,
thread: {
posts,
postgate: draft.postgate || state.thread.postgate,