|
| 1 | +import React, { useState } from 'react'; |
| 2 | +import { UserTablePagination } from './user-table-pagination'; |
| 3 | +import { |
| 4 | + INITIAL_DIRECTION, |
| 5 | + OnOrderByChanged, |
| 6 | + OrderByData, |
| 7 | + OrderByDirection, |
| 8 | + toggleOrderByDirection |
| 9 | +} from '../table-utils'; |
| 10 | +import Show from '../../felles/show'; |
| 11 | +import arrowUpIcon from './arrow-up.svg'; |
| 12 | +import arrowDownIcon from './arrow-down.svg'; |
| 13 | +import './user-table-header.less'; |
| 14 | + |
| 15 | +interface UserTableHeaderProps { |
| 16 | + onOrderByChanged: OnOrderByChanged; |
| 17 | +} |
| 18 | + |
| 19 | +export enum HeaderFieldName { |
| 20 | + NAVN = 'NAVN', |
| 21 | + FNR = 'FNR', |
| 22 | + OPPFOLGING_STARTET = 'OPPFOLGING_STARTET', |
| 23 | + OPFOLGING_ENHET = 'OPFOLGING_ENHET', |
| 24 | + BESLUTTER = 'BESLUTTER', |
| 25 | + STATUS = 'STATUS', |
| 26 | + UTKAST_ENDRET = 'UTKAST_ENDRET' |
| 27 | +} |
| 28 | + |
| 29 | +export const UserTableHeader = (props: UserTableHeaderProps) => { |
| 30 | + const [orderByData, setOrderByData] = useState<OrderByData>({ fieldName: HeaderFieldName.NAVN, direction: OrderByDirection.NONE }); |
| 31 | + |
| 32 | + function handleOnOrderByChanged(fieldName: HeaderFieldName) { |
| 33 | + const newOrderByData: OrderByData = { |
| 34 | + fieldName, |
| 35 | + direction: INITIAL_DIRECTION |
| 36 | + }; |
| 37 | + |
| 38 | + if (fieldName === orderByData.fieldName) { |
| 39 | + newOrderByData.direction = toggleOrderByDirection(orderByData.direction); |
| 40 | + } |
| 41 | + |
| 42 | + console.log('orderByData', newOrderByData); // tslint:disable-line |
| 43 | + setOrderByData(newOrderByData); |
| 44 | + props.onOrderByChanged(newOrderByData); |
| 45 | + } |
| 46 | + |
| 47 | + return ( |
| 48 | + <div className="user-table-header"> |
| 49 | + <HeaderField name={HeaderFieldName.NAVN} text="Etternavn, Fornavn" orderByData={orderByData} onOrderByChanged={handleOnOrderByChanged} /> |
| 50 | + <HeaderField name={HeaderFieldName.FNR} text="Fødselsnummer" orderByData={orderByData} onOrderByChanged={handleOnOrderByChanged} /> |
| 51 | + <HeaderField name={HeaderFieldName.OPPFOLGING_STARTET} text="Oppfølging startet" orderByData={orderByData} onOrderByChanged={handleOnOrderByChanged} /> |
| 52 | + <HeaderField name={HeaderFieldName.OPFOLGING_ENHET} text="Oppfølgingsenhet" orderByData={orderByData} onOrderByChanged={handleOnOrderByChanged} /> |
| 53 | + <HeaderField name={HeaderFieldName.BESLUTTER} text="Beslutter" orderByData={orderByData} onOrderByChanged={handleOnOrderByChanged} /> |
| 54 | + <HeaderField name={HeaderFieldName.STATUS} text="Status" orderByData={orderByData} onOrderByChanged={handleOnOrderByChanged} /> |
| 55 | + <HeaderField name={HeaderFieldName.UTKAST_ENDRET} text="Utkast sist endret" orderByData={orderByData} onOrderByChanged={handleOnOrderByChanged} /> |
| 56 | + <UserTablePagination /> |
| 57 | + </div> |
| 58 | + ); |
| 59 | +}; |
| 60 | + |
| 61 | +interface HeaderFieldProps { |
| 62 | + name: HeaderFieldName; |
| 63 | + text: string; |
| 64 | + orderByData: OrderByData; |
| 65 | + onOrderByChanged: (fieldName: HeaderFieldName) => void; |
| 66 | +} |
| 67 | + |
| 68 | +const HeaderField = (props: HeaderFieldProps) => { |
| 69 | + const { name, text, orderByData, onOrderByChanged } = props; |
| 70 | + const icon = orderByData.direction === OrderByDirection.ASC ? arrowUpIcon : arrowDownIcon; |
| 71 | + const alt = 'Sortert ' + (orderByData.direction === OrderByDirection.ASC ? 'økende' : 'synkenede'); |
| 72 | + return ( |
| 73 | + <button onClick={() => onOrderByChanged(name)} className="table-header-field"> |
| 74 | + {text} |
| 75 | + <Show if={orderByData.fieldName === name && orderByData.direction !== OrderByDirection.NONE}> |
| 76 | + <img className="table-header-field__order-icon" src={icon} alt={alt} /> |
| 77 | + </Show> |
| 78 | + </button> |
| 79 | + ); |
| 80 | +}; |
0 commit comments