diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts
index db5c9c2478..c36b1d49ba 100644
--- a/src/lib/api/index.ts
+++ b/src/lib/api/index.ts
@@ -111,6 +111,7 @@ export async function post(
embed,
langs,
labels,
+ tags: draft.tags,
})
} catch (e: any) {
logger.error(`Failed to create post`, {
diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx
index 79e9acfbe0..fa61623cc6 100644
--- a/src/view/com/composer/Composer.tsx
+++ b/src/view/com/composer/Composer.tsx
@@ -165,7 +165,13 @@ export const ComposePost = ({
const [draft, dispatch] = useReducer(
composerReducer,
- {initImageUris, initQuoteUri: initQuote?.uri, initText, initMention},
+ {
+ initImageUris,
+ initQuoteUri: initQuote?.uri,
+ initText,
+ initMention,
+ initOutlineTags: [],
+ },
createComposerState,
)
const richtext = draft.richtext
@@ -509,6 +515,13 @@ export const ComposePost = ({
dispatch({type: 'embed_update_gif', alt: altText})
}, [])
+ const onChangeOutlineTags = useCallback(
+ (tags: string[]) => {
+ dispatch({type: 'tags_update', tags})
+ },
+ [dispatch],
+ )
+
const {
scrollHandler,
onScrollViewContentSizeChange,
@@ -745,7 +758,7 @@ export const ComposePost = ({
- {}} />
+
diff --git a/src/view/com/composer/state/composer.ts b/src/view/com/composer/state/composer.ts
index 049488f3a5..b32a4c70b4 100644
--- a/src/view/com/composer/state/composer.ts
+++ b/src/view/com/composer/state/composer.ts
@@ -53,6 +53,7 @@ export type ComposerDraft = {
postgate: AppBskyFeedPostgate.Record
threadgate: ThreadgateAllowUISetting[]
embed: EmbedDraft
+ tags: string[]
}
export type ComposerAction =
@@ -76,6 +77,7 @@ export type ComposerAction =
| {type: 'embed_add_gif'; gif: Gif}
| {type: 'embed_update_gif'; alt: string}
| {type: 'embed_remove_gif'}
+ | {type: 'tags_update'; tags: string[]}
export const MAX_IMAGES = 4
@@ -324,6 +326,12 @@ export function composerReducer(
},
}
}
+ case 'tags_update': {
+ return {
+ ...state,
+ tags: action.tags,
+ }
+ }
default:
return state
}
@@ -334,11 +342,13 @@ export function createComposerState({
initMention,
initImageUris,
initQuoteUri,
+ initOutlineTags,
}: {
initText: string | undefined
initMention: string | undefined
initImageUris: ComposerOpts['imageUris']
initQuoteUri: string | undefined
+ initOutlineTags: string[]
}): ComposerDraft {
let media: ImagesMedia | undefined
if (initImageUris?.length) {
@@ -379,5 +389,6 @@ export function createComposerState({
media,
link: undefined,
},
+ tags: initOutlineTags,
}
}