(\n invoiceFile && id === protocolId ? 'invoice_preview' : 'invoice_generator'\n );\n\n if (typeof id !== 'string') {\n addWarning(Warnings.INVALID_QUERY_PARAM, { page: `protocols/${id}/generate-invoice`, query: id });\n\n return {t('protocols:protocol.notFound')}
;\n }\n\n const StepComponent = STEPS[currentStep];\n const stepProps = {\n id,\n setCurrentStep,\n };\n\n return ;\n};\n","'use client';\n\nimport { toMonthNameAndYearString } from 'dates';\nimport { useRouter } from 'next/navigation';\nimport { memo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button, ProtocolCard as UiProtocolCard, useResolution } from 'ui';\n\nimport { Protocol } from '~/data/types';\n\nimport { DownloadButton } from '../shared/DownloadButton';\n\nexport const ProtocolCard = memo(({ protocol }: { protocol: Protocol }) => {\n const { t } = useTranslation('protocols');\n const { push } = useRouter();\n\n const { isTablet } = useResolution();\n\n const {\n protocolId,\n protocolNumber,\n customer,\n date,\n meteringPointCount,\n amount,\n invoiceFile,\n protocolFile,\n hourlyReportFile,\n } = protocol;\n\n const downloadButtons = [\n protocolFile && (\n \n {t('protocol')}\n \n ),\n invoiceFile && protocolNumber && (\n \n {t('invoice')}\n \n ),\n hourlyReportFile && (\n \n {t('hourlyReport')}\n \n ),\n ].filter(Boolean);\n\n return (\n push(`/protocols/${protocolId}/generate-invoice`)} size={isTablet ? 'sm' : 'xs'}>\n {t('generateInvoice')}\n \n )\n }\n data-testid=\"protocol-card\"\n amount={amount}\n details={[\n t('protocols:meteringPoints', {\n meteringPointCount,\n }),\n ]}\n downloadButtons={downloadButtons}\n customerName={customer.name}\n />\n );\n});\n","import { ProtocolCard } from './ProtocolCard';\n\nexport { ProtocolCard };\n","import { CardListContainer } from 'ui';\n\nimport { Protocol } from '~/data/types';\n\nimport { ProtocolCard } from '../detail';\n\nexport const ProtocolCardList = ({ list }: { list: Protocol[] }) => {\n return (\n {\n return ;\n })}\n />\n );\n};\n","import { toMonthNameAndYearString } from 'dates';\nimport { TFunction } from 'i18next';\nimport { useMemo } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button, DataTable, DataTableColumns, Typography } from 'ui';\n\nimport { Protocol } from '~/data';\n\nimport { DownloadButton } from '../shared/DownloadButton';\n\nconst DownloadFileButton = ({ file, label, disabled }: { file: string | null; label: string; disabled?: boolean }) => {\n const { t } = useTranslation('protocols');\n\n return (\n \n {t(`${label}`)}\n \n );\n};\n\nconst GenerateInvoiceButton = ({ row }: { row: Protocol }) => {\n const { t } = useTranslation('protocols');\n\n return row.invoiceFile ? (\n {row.protocolNumber}\n ) : (\n \n );\n};\n\nexport const buildTableColumns = (t: TFunction): DataTableColumns[] => [\n {\n accessor: 'customer',\n header: t('table.customerName'),\n value: ({ row }) => {row.customer.name},\n },\n {\n accessor: 'protocolNumber',\n header: t('table.protocolNumber'),\n value: GenerateInvoiceButton,\n },\n {\n accessor: 'date',\n header: t('table.date'),\n value: ({ row }) => (\n {toMonthNameAndYearString({ date: row.date })}\n ),\n },\n { accessor: 'meteringPointCount', header: t('table.meteringPointCount') },\n {\n accessor: 'amount',\n header: t('table.amount'),\n value: ({ row }) => (\n \n {t('amount', { amount: row.amount })}\n \n ),\n },\n {\n accessor: 'invoiceFile',\n header: t('table.invoiceFile'),\n value: ({ row }) => ,\n },\n {\n accessor: 'protocolFile',\n header: t('table.protocolFile'),\n value: ({ row }) => ,\n },\n {\n accessor: 'hourlyReportFile',\n header: t('table.hourlyReportFile'),\n value: ({ row }) => ,\n },\n];\n\nexport const ProtocolTable = ({ list }: { list: Protocol[] }) => {\n const { t } = useTranslation('protocols');\n\n const tableColumns = useMemo(() => buildTableColumns(t), [t]);\n\n return columns={tableColumns} uid=\"protocolNumber\" data-testid=\"protocol-table\" data={list} />;\n};\n","import { Protocol } from '~/data/types';\nimport { useLayoutStore } from '~/store';\nimport { NoResultsMessage } from '~/ui';\n\nimport { ProtocolCardList } from './ProtocolCardList';\nimport { ProtocolTable } from './ProtocolTable';\n\nexport const ProtocolList = ({ list }: { list: Protocol[] }) => {\n const { layout } = useLayoutStore();\n\n if (!list) {\n return ;\n }\n\n if (layout === 'table') {\n return ;\n }\n\n return ;\n};\n","'use client';\n\nimport { useTranslation } from 'react-i18next';\nimport { ListPageTitle } from 'ui';\n\nimport { CustomerPicker } from '~/customer';\nimport { LayoutSwitcher, ScrollableViewWithData } from '~/ui';\n\nimport { useProtocols } from '../../hooks/useProtocols/useProtocols';\nimport { ProtocolList } from './ProtocolList';\n\nconst UserProtocols = () => {\n const { t } = useTranslation();\n\n return (\n <>\n \n \n \n >\n }\n />\n\n \n >\n );\n};\n\nexport default UserProtocols;\n","'use client';\n\nimport { Button, CustomButtonProps, useResolution } from 'ui';\n\ninterface Props extends CustomButtonProps {\n downloadUrl: string;\n}\n\nexport const DownloadButton = ({ downloadUrl, children, color, onClick, ...rest }: Props) => {\n const { isTablet } = useResolution();\n\n return (\n \n );\n};\n","import { GenerateInvoiceState } from './types';\n\ntype SetInvoiceData = {\n payload: {\n invoiceData: GenerateInvoiceState['invoiceData'];\n };\n type: 'SET_INVOICE_DATA';\n};\n\nexport const SET_INVOICE_DATA: SetInvoiceData = {\n payload: {\n invoiceData: {\n invoiceNumber: '',\n customerName: '',\n invoiceFile: '',\n protocolId: '',\n },\n },\n type: 'SET_INVOICE_DATA',\n};\n\nexport type Action = SetInvoiceData;\n","import { Reducer } from 'react';\n\nimport { Action, SET_INVOICE_DATA } from './actions';\nimport { GenerateInvoiceState } from './types';\n\nexport const stateReducer: Reducer = (prevState, action) => {\n switch (action.type) {\n case SET_INVOICE_DATA.type:\n return {\n ...prevState,\n ...action.payload,\n };\n default:\n return prevState;\n }\n};\n","import { Reducer, useReducer } from 'react';\n\nimport { Action, SET_INVOICE_DATA } from './actions';\nimport { stateReducer } from './stateReducer';\nimport { GenerateInvoiceState } from './types';\n\nexport const DEFAULT_STATE: GenerateInvoiceState = {\n invoiceData: { customerName: '', invoiceFile: '', invoiceNumber: '', protocolId: '' },\n};\n\nexport type UseStateManagerReturn = {\n setInvoiceData: (invoiceData: GenerateInvoiceState['invoiceData']) => void;\n state: GenerateInvoiceState;\n};\n\nexport const useStateManager = (): UseStateManagerReturn => {\n const [state, dispatch] = useReducer>(stateReducer, DEFAULT_STATE);\n\n const setInvoiceData = (invoiceData: GenerateInvoiceState['invoiceData']): void => {\n dispatch({ payload: { invoiceData }, type: SET_INVOICE_DATA.type });\n };\n\n return { setInvoiceData, state };\n};\n","'use client';\n\nimport { createContext, useContext, useMemo } from 'react';\n\nimport { DEFAULT_STATE, useStateManager, UseStateManagerReturn } from './useStateManager';\n\ntype InvoiceState = UseStateManagerReturn['state'];\n\ntype StateManagerActions = Omit;\n\ntype GenerateInvoiceContext = StateManagerActions & {\n invoiceData: InvoiceState['invoiceData'];\n};\n\nconst GenerateInvoiceContext = createContext({\n invoiceData: DEFAULT_STATE.invoiceData,\n setInvoiceData: () => {},\n});\n\ninterface GenerateInvoiceProviderProps {\n children: React.ReactNode;\n}\n\nexport const GenerateInvoiceProvider = ({ children }: GenerateInvoiceProviderProps) => {\n const { state, setInvoiceData } = useStateManager();\n\n const context = useMemo(() => {\n return {\n setInvoiceData,\n ...state,\n };\n }, [setInvoiceData, state]);\n\n return {children};\n};\n\nexport const useGenerateInvoice = () => {\n const context = useContext(GenerateInvoiceContext);\n\n if (!context) {\n throw new Error('useGenerateInvoice must be used within a GenerateInvoiceProvider');\n }\n\n return context;\n};\n","import { useQueryClient } from '@tanstack/react-query';\n\nimport { createDataCacheKeys } from '~/data';\nimport { UsePaginatedQueryResult, useProtocolApi, useSuspensePaginatedQuery } from '~/data/api';\nimport { Protocol } from '~/data/types';\n\nconst cacheKeys = createDataCacheKeys('protocols');\n\nexport type ProtocolsOptions = {\n size?: number;\n};\n\nexport type UseProtocolsResult = UsePaginatedQueryResult;\n\nexport const useUpdateProtocolsCache = () => {\n const queryClient = useQueryClient();\n\n const updateProtocolsCache = async () => {\n await queryClient.refetchQueries({ queryKey: [...cacheKeys.list()] });\n };\n\n return { updateProtocolsCache };\n};\n\nexport const useProtocols = ({ size }: ProtocolsOptions): UseProtocolsResult => {\n const api = useProtocolApi();\n\n const { data, isLoading, isError, isSuccess, error, fetchNextPage } = useSuspensePaginatedQuery({\n cacheKey: [...cacheKeys.list()],\n fetchAll: (pageParams) => api.getAll({ page: pageParams.page, size: size || pageParams.size }),\n });\n\n return {\n data,\n error,\n fetchNextPage,\n isError,\n isLoading,\n isSuccess,\n };\n};\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M7 14H5v5h5v-2H7zm-2-4h2V7h3V5H5zm12 7h-3v2h5v-5h-2zM14 5v2h3v3h2V5z\"\n}), 'FullscreenOutlined');"],"names":["__webpack_exports__","children","param","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","I18nextProvider","i18n","path","require","isInitialized","Backend","use","LanguageDetector","initReactI18next","init","backend","loadPath","resolve","defaultNS","fallbackLng","interpolation","escapeValue","lng","ns","cacheKeys","createDataCacheKeys","useProtocol","protocolId","api","useProtocolApi","data","error","isLoading","isError","isSuccess","refetch","useSuspenseQuery","queryFn","get","queryKey","detail","pdfjs","GlobalWorkerOptions","workerSrc","__webpack_require__","U","toString","shared_ShowPdfFile","file","scale","loadingText","pages","setNumPages","useState","jsx_runtime","Document","onLoadSuccess","numPages","loading","Array","from","_","index","Box","display","justifyContent","Page","pageNumber","renderTextLayer","renderAnnotationLayer","concat","CloudStorageFilePreview","fileUrl","download","t","useTranslation","isTablet","isLargeTablet","useResolution","showModal","setShowModal","setFile","Blob","setLoading","handleClose","getFile","useCloudStorageFile","useEffect","fetchFile","fileContent","jsxs","height","mb","width","ml","IconButton","onClick","color","sx","padding","data-testid","FullscreenOutlined","fontSize","Dialog","onClose","open","maxWidth","DialogContent","Typography","ShowPdfFile","DialogActions","Button","size","justifySelf","overflowX","overflowY","mt","DownloadButton","downloadUrl","InvoiceFilePreview","invoiceFile","showAlert","invoiceFileBlob","Buffer","type","invoiceFileUrl","URL","createObjectURL","Fragment","alignItems","variant","fontWeight","InvoiceGeneratorLayout","leftChild","rightChild","customerName","isDesktop","ListPageTitle","title","CardGradient","text","Paper","Grid","container","item","xs","lg","pl","InvoiceGeneratorTitle","date","amount","meteringPointCount","flexDirection","textTransform","CurrencyFormat","value","TabPanel","props","hidden","flexGrow","p","FilePreviewTabs","tabs","setValue","borderBottom","borderColor","Tabs","onChange","_event","newValue","map","tab","Tab","label","margin","content","DocumentsPreview","id","invoiceData","invoiceNumber","useGenerateInvoice","protocolDate","toMonthNameAndYearString","customer","name","protocolFile","mr","gap","hourlyReportFile","InvoiceGenerator","onComplete","back","useRouter","errorMessage","setErrorMessage","setInvoiceData","getInvoicePreviewFile","resolver","yupResolver","object","string","required","matches","max","transform","padStart","handleSubmit","watch","formState","getValues","rest","useForm","defaultValues","mode","onSubmit","values","issuedBy","logger","FormProvider","Form","my","TextInput","fullWidth","placeholder","shrink","InvoicePreview","onEdit","saveInvoiceFile","updateProtocolsCache","useUpdateProtocolsCache","protocolNumber","STEPS","invoice_generator","setCurrentStep","invoice_preview","preview","InvoiceGeneratorContainer","params","useParams","currentStep","addWarning","Warnings","INVALID_QUERY_PARAM","page","query","StepComponent","ProtocolCard","memo","protocol","push","downloadButtons","disabled","filter","Boolean","UiProtocolCard","subtitle","generateInvoiceButton","details","ProtocolCardList","list","CardListContainer","elements","DownloadFileButton","GenerateInvoiceButton","row","buildTableColumns","accessor","header","ProtocolTable","tableColumns","useMemo","DataTable","columns","uid","ProtocolList","layout","useLayoutStore","NoResultsMessage","list_UserProtocols","desktopActions","CustomerPicker","LayoutSwitcher","ScrollableViewWithData","useDataHook","useProtocols","hookOptions","ListComponent","event","preventDefault","window","stateReducer","prevState","action","payload","DEFAULT_STATE","useStateManager","state","dispatch","useReducer","GenerateInvoiceContext","createContext","GenerateInvoiceProvider","context","Provider","useContext","queryClient","useQueryClient","refetchQueries","fetchNextPage","useSuspensePaginatedQuery","cacheKey","fetchAll","getAll","pageParams","Z","createSvgIcon","_jsx","d"],"sourceRoot":""}