2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Hexabase JavaScript/TypeScript SDK × Vue3でアプリを作る(データストアの更新・削除編)

Posted at

Hexabase JavaScript/TypeScript SDKをVue3アプリの中で利用します。あまり複雑にならないように解説しますので、ぜひ試してみてください。

前回はデータストア(クラウドデータベース)へのデータ作成と、データの一覧取得について実装しました。今回はデータストアの更新、そして削除について解説します。

コード

コードはhexabase/example-vue3-todo: Hexabase demo todo app by vue3 projectにアップしてあります。実装時の参考にしてください。

必要なもの

  • Hexabaseのアカウント

データの編集について

データの編集については、まず一覧画面から画面遷移できるようにルーティングを作成します。これは router/index.ts に実装します。コンポーネントはタスク追加と同じ AddTaskView を使います。

{
	path: "/:id/edit",
	name: "editTask",
	component: AddTaskView,
},

フォームへのデフォルト値の設定

上記のルーティング設定で、 route.params.id を使って編集を行うIDが取得できます。

import { useRouter, useRoute } from "vue-router";
const route = useRoute();
const id = route.params.id as string | undefined;

このidの有無によって、新規作成と編集とを分けられます。idがあればデータストアから詳細情報を取得し、ストアにセットします。

if (id) {
  const { itemDetails, error } = await store.client.item.getItemDetail(
    store.datastoreId,
    id,
    store.projectId,
    {
      use_display_id: true,
      return_number_value: true,
      format: "map",
      include_linked_items: true,
      include_lookups: true,
    }
  );
  if (error) {
    message.value = "Failed to get item details.";
  }
  store.replaceItem(id, itemDetails);
}

replaceItem 関数は、指定されたidの内容を詳細情報に差し替える関数です。 stores/hexabase.ts にて定義しています。

// Replace Item
const replaceItem = (id: string, item: any) => {
	item.i_id = id;
	const i = items.value.findIndex((i) => i.i_id === item.i_id);
	if (i === -1) {
		items.value.push(item);
	} else {
		items.value[i] = item;
	}
};

そして、 id の有無によってフォームのデフォルト値を差し替えます。 id がない場合(=新規作成)には、デフォルト値を返します。

const _getDefaultValue = (id?: string) => {
  const defaultParams = {
    name: "",
    description: "",
    deadlineDate: "",
  };

  if (!id) return defaultParams;

  const item = store.getItem(id);
  if (!item) return defaultParams;
  return {
    name: item.field_values.name.value,
    description: item.field_values.description.value,
    deadlineDate: item.field_values.deadlineDate.value,
  };
};
// Form instance and inputs
const formRef = ref<FormInstance>();
const taskForm = reactive<{
  name: string;
  description: string;
  deadlineDate: string;
}>(_getDefaultValue(route.params.id as string));

これで編集時の表示が完了します。

更新処理

続いてデータの更新処理です。まず id の有無によって新規作成と更新とに処理を分けます。

const { item, error } = await (id ? _updateItem() : _createItem());

更新時の処理は以下のようになります。

const _updateItem = async (): Promise<{
  item: any;
  error: string | undefined;
}> => {
  const task = store.getItem(route.params.id as string);
  // Build item parameters
  const item = {
    name: taskForm.name,
    description: taskForm.description,
    deadlineDate: new Date(taskForm.deadlineDate),
  };
  // Build parameters
  const params: ItemActionParameters = {
    item,
    rev_no: task.rev_no,
    use_display_id: true,
    return_item_result: true,
  };
  const res = await store.client.item.update(
    store.projectId,
    store.datastoreId,
    id!,
    params
  );
  return { item: task, error: res.error };
};

これでデータストアの編集処理が完了します。

データの削除処理

データの削除処理は以下のようになります。注意点として、データ削除の a_id (アクションID)が必要になります。

// Delete item
const remove = async () => {
  if (!confirm("Are you sure you want to delete this item?")) return;
  // Get parameters
  const task = store.getItem(id!);
  const a_id = task.item_actions.DeleteItem.a_id;
  // Delete request
  const { error } = await store.client.item.delete(
    store.projectId,
    store.datastoreId,
    id!,
    {
      a_id,
    }
  );
  // Handling response
  if (error) {
    _setMessage("Failed to delete item.");
  } else {
    store.removeItem(id!);
    router.back();
  }
};

removeItem は指定したIDをストアから削除する処理です。 stores/hexabase.ts にて定義しています。

const removeItem = (id: string) => {
	const i = items.value.findIndex((i) => i.i_id === id);
	if (i !== -1) {
		items.value.splice(i, 1);
	}
};

まとめ

今回はHexabase JavaScript SDKを使って、データストアの編集と削除処理について実装しました。

次回はデータのステータス変更について解説します。

株式会社 Hexabaseー法人向けクラウドシステム『Hexabase』ー

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?