Skip to content

Commit

Permalink
一括登録ボタンの csv ファイル読み込み部分のみ実装
Browse files Browse the repository at this point in the history
  • Loading branch information
kuramapommel committed Aug 31, 2024
1 parent d8debfe commit 7933667
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import BulkImportButton from '@/components/organisms/products/bulk-import-button'
import type { Meta, StoryObj } from '@storybook/react'

const meta: Meta<typeof BulkImportButton> = {
title: 'organisms/products/bulk-import-button',
component: BulkImportButton,
parameters: {
// Optional parameter to center the component in the Canvas. More info: https://storybook.js.org/docs/configure/story-layout
layout: 'centered',
},
tags: ['autodocs'],
}

export default meta

type Story = StoryObj<typeof BulkImportButton>

/**
* 一括登録ボタン
*/
export const Default: Story = {
args: {},
}
35 changes: 35 additions & 0 deletions sample/src/components/organisms/products/bulk-import-button.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import StandardButton from '@/components/atoms/buttons/standard-button'
import { parse } from '@/libs/papaparse'
import { validationSchema } from '@/reducks/products/types'
import React, { ChangeEvent, useCallback } from 'react'
import { z } from 'zod'

const BulkImportButton = React.memo(function BulkImportButton() {
const inputRef = React.useRef<HTMLInputElement>(null)
const onChange = useCallback(async (event: ChangeEvent<HTMLInputElement>) => {
const file = event.target.files?.[0]
if (!file) return

const parsed = await parse(file, z.array(validationSchema))
alert(JSON.stringify(parsed))
}, [])

const upload = useCallback(() => {
inputRef.current?.click()
}, [])

return (
<div>
<StandardButton onclick={upload} name="一括登録" />
<input
hidden
type="file"
accept=".csv"
ref={inputRef}
onChange={onChange}
/>
</div>
)
})

export default BulkImportButton
2 changes: 2 additions & 0 deletions sample/src/pages/product-list.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import ProductAdditionForm from '@/components/molecules/forms/products/product-a
import ProductDeletionForm from '@/components/molecules/forms/products/product-deletion-form'
import ProductEditingForm from '@/components/molecules/forms/products/product-editing-form'
import Modal from '@/components/molecules/modals/modal'
import BulkImportButton from '@/components/organisms/products/bulk-import-button'
import TenantsTemplate from '@/components/templates/tenants-template'
import { useProducts } from '@/hooks/use-products'
import { getProductsAndRefresh } from '@/reducks/products/selectors'
Expand Down Expand Up @@ -55,6 +56,7 @@ const ProductList: React.FC = () => {
<button css={styles.button} onClick={() => setIsModalOpen(true)}>
新規作成
</button>
<BulkImportButton />

{isDeleteDialogOpen && productToDelete && (
<div css={styles.overlay}>
Expand Down

0 comments on commit 7933667

Please sign in to comment.