diff --git a/src/client/components/post-form-dialog.vue b/src/client/components/post-form-dialog.vue
index fbdf937556..81d487fa97 100644
--- a/src/client/components/post-form-dialog.vue
+++ b/src/client/components/post-form-dialog.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="ulveipgl" :style="{ pointerEvents: closing ? 'none' : 'auto' }">
-	<transition :name="$store.state.device.animation ? 'form-fade' : ''" appear @after-leave="$store.commit('setPostForm', null)">
+	<transition :name="$store.state.device.animation ? 'form-fade' : ''" appear @after-leave="destroy">
 		<div class="bg _modalBg" ref="bg" v-if="!closing" @click="close()"></div>
 	</transition>
 	<div class="main" ref="main" @click.self="close()" @keydown="onKeydown">
@@ -36,6 +36,12 @@ export default defineComponent({
 	},
 
 	props: {
+		destroy: {
+			required: true
+		},
+		emit: {
+			required: true
+		},
 		reply: {
 			type: Object,
 			required: false
diff --git a/src/client/default.vue b/src/client/default.vue
index 96b2d484fd..2899f684ee 100644
--- a/src/client/default.vue
+++ b/src/client/default.vue
@@ -296,7 +296,7 @@ export default defineComponent({
 		},
 
 		post() {
-			this.$store.commit('setPostForm', {});
+			os.post();
 		},
 
 		search() {
diff --git a/src/client/os.ts b/src/client/os.ts
index 9fbae46fe8..f1dfd58b40 100644
--- a/src/client/os.ts
+++ b/src/client/os.ts
@@ -73,7 +73,13 @@ export function dialog(props: Record<string, any>) {
 
 export function menu(props: Record<string, any>) {
 	return new Promise((res, rej) => {
-		return popup(defineAsyncComponent(() => import('@/components/menu.vue')), props, res);
+		popup(defineAsyncComponent(() => import('@/components/menu.vue')), props, res);
+	});
+}
+
+export function post(props: Record<string, any>) {
+	return new Promise((res, rej) => {
+		popup(defineAsyncComponent(() => import('@/components/post-form-dialog.vue')), props, res);
 	});
 }