Skip to content

Commit 69072f8

Browse files
committed
Make switch sticky above table header
1 parent 09b1ec0 commit 69072f8

9 files changed

+63
-22
lines changed

packages/bygger/src/translations/components/NewTranslationRow.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Table, TextField } from '@navikt/ds-react';
22
import { useEditGlobalTranslations } from '../../context/translations/EditGlobalTranslationsContext';
3-
import useTranslationTableStyles from './styles';
3+
import { useTranslationTableStyles } from './styles';
44

55
const NewTranslationRow = () => {
66
const { newTranslation, updateNewTranslation, errors } = useEditGlobalTranslations();

packages/bygger/src/translations/components/TranslationDisplayCell.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { PadlockLockedIcon } from '@navikt/aksel-icons';
22
import { Table } from '@navikt/ds-react';
33
import { InnerHtml, htmlUtils } from '@navikt/skjemadigitalisering-shared-components';
4-
import useTranslationTableStyles from './styles';
4+
import { useTranslationTableStyles } from './styles';
55

66
interface Props {
77
text?: string;

packages/bygger/src/translations/components/TranslationRow.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { FormsApiTranslation, formsApiTranslations, TranslationLang } from '@nav
44
import { useEffect, useMemo, useState } from 'react';
55
import { TranslationError } from '../../context/translations/utils/errorUtils';
66
import { getInputHeightInRows } from '../utils/translationsUtils';
7-
import useTranslationTableStyles from './styles';
87
import TranslationDisplayCell from './TranslationDisplayCell';
98
import TranslationInput from './TranslationInput';
9+
import { useTranslationTableStyles } from './styles';
1010

1111
interface Props<Translation extends FormsApiTranslation> {
1212
translation: Translation;

packages/bygger/src/translations/components/TranslationTable.tsx

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { SortState, Table } from '@navikt/ds-react';
22
import { SkeletonList } from '@navikt/skjemadigitalisering-shared-components';
33
import { ReactNode } from 'react';
4-
import useTranslationTableStyles from './styles';
4+
import { useTranslationTableStyles } from './styles';
55

66
const defaultColumns = [
77
{ key: 'nb', label: 'Bokmål' },
@@ -15,6 +15,7 @@ interface Props {
1515
sort?: SortState;
1616
onSortChange?: (sortkey: string) => void;
1717
loading?: boolean;
18+
stickyHeaderClassname?: string;
1819
children?: ReactNode[];
1920
}
2021

@@ -24,6 +25,7 @@ const TranslationTable = ({
2425
sort,
2526
onSortChange,
2627
loading = false,
28+
stickyHeaderClassname,
2729
children,
2830
}: Props) => {
2931
const styles = useTranslationTableStyles();
@@ -34,7 +36,7 @@ const TranslationTable = ({
3436

3537
return (
3638
<Table className={styles.table} sort={sort} onSortChange={onSortChange}>
37-
<Table.Header className={styles.header}>
39+
<Table.Header className={stickyHeaderClassname}>
3840
<Table.Row>
3941
{columns.map((column) => (
4042
<Table.ColumnHeader

packages/bygger/src/translations/components/UnusedTranslationRow.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Button, Table } from '@navikt/ds-react';
22
import { FormsApiTranslation, formsApiTranslations } from '@navikt/skjemadigitalisering-shared-domain';
33
import { useState } from 'react';
44
import TranslationDisplayCell from './TranslationDisplayCell';
5-
import useTranslationTableStyles from './styles';
5+
import { useTranslationTableStyles } from './styles';
66

77
interface Props {
88
translation: FormsApiTranslation;

packages/bygger/src/translations/components/UnusedTranslations.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { ReadMore } from '@navikt/ds-react';
22
import { FormsApiTranslation } from '@navikt/skjemadigitalisering-shared-domain';
33
import TranslationTable, { defaultColumns } from './TranslationTable';
44
import UnusedTranslationRow from './UnusedTranslationRow';
5+
import { useStickyStyles } from './styles';
56

67
interface Props {
78
translations?: FormsApiTranslation[];
@@ -10,6 +11,7 @@ interface Props {
1011
}
1112

1213
const UnusedTranslations = ({ translations, onRemove, showKeys = false }: Props) => {
14+
const stickyStyles = useStickyStyles();
1315
const columns = showKeys ? [{ key: 'key', label: 'Nøkkel' }, ...defaultColumns] : defaultColumns;
1416

1517
if (!translations || translations.length === 0) {
@@ -18,7 +20,11 @@ const UnusedTranslations = ({ translations, onRemove, showKeys = false }: Props)
1820

1921
return (
2022
<ReadMore header={`Se alle ubrukte oversettelser (${translations.length})`}>
21-
<TranslationTable columns={columns} actionColumn={{ key: 'deleteButton', label: '' }}>
23+
<TranslationTable
24+
columns={columns}
25+
actionColumn={{ key: 'deleteButton', label: '' }}
26+
stickyHeaderClassname={stickyStyles.unusedTranslations}
27+
>
2228
{translations.map((translation) => (
2329
<UnusedTranslationRow
2430
key={translation.key}

packages/bygger/src/translations/components/styles.ts

+22-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
11
import { makeStyles } from '@navikt/skjemadigitalisering-shared-components';
22

3+
const sticky = {
4+
position: 'sticky',
5+
top: '0',
6+
backgroundColor: 'var(--a-bg-default)',
7+
zIndex: '10000',
8+
};
9+
const useStickyStyles = makeStyles({
10+
filterRow: {
11+
...sticky,
12+
top: '9.5rem',
13+
},
14+
unusedTranslations: {
15+
...sticky,
16+
top: '8.5rem',
17+
},
18+
mainTable: {
19+
...sticky,
20+
top: '12.5rem',
21+
},
22+
});
23+
324
const useTranslationTableStyles = makeStyles({
425
table: {
526
marginBottom: '4rem',
627
},
7-
header: {
8-
position: 'sticky',
9-
top: '8.5rem',
10-
backgroundColor: 'var(--a-bg-default)',
11-
zIndex: '10000',
12-
},
1328
column: {
1429
width: '12rem',
1530
maxWidth: '12rem',
@@ -28,4 +43,4 @@ const useTranslationTableStyles = makeStyles({
2843
},
2944
});
3045

31-
export default useTranslationTableStyles;
46+
export { useStickyStyles, useTranslationTableStyles };

packages/bygger/src/translations/form/FormTranslationsTable.tsx

+13-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { useMemo, useState } from 'react';
55
import { useEditFormTranslations } from '../../context/translations/EditFormTranslationsContext';
66
import TranslationRow from '../components/TranslationRow';
77
import TranslationTable from '../components/TranslationTable';
8+
import { useStickyStyles } from '../components/styles';
89

910
interface Props {
1011
translations: FormsApiFormTranslation[] | undefined;
@@ -15,6 +16,7 @@ const FormTranslationsTable = ({ translations, loading = false }: Props) => {
1516
const [isFilterChecked, setIsFilterChecked] = useState(false);
1617
const [sortState, setSortState] = useState<SortState>();
1718
const { updateTranslation, errors, editState } = useEditFormTranslations();
19+
const stickyStyles = useStickyStyles();
1820

1921
const handleSort = (sortKey: string) => {
2022
setSortState((currentState) => {
@@ -36,10 +38,17 @@ const FormTranslationsTable = ({ translations, loading = false }: Props) => {
3638

3739
return (
3840
<>
39-
<Switch checked={isFilterChecked} onChange={(event) => setIsFilterChecked(event.target.checked)}>
40-
Vis kun manglende oversettelser
41-
</Switch>
42-
<TranslationTable loading={loading || !sortedRows} sort={sortState} onSortChange={handleSort}>
41+
<div className={stickyStyles.filterRow}>
42+
<Switch checked={isFilterChecked} onChange={(event) => setIsFilterChecked(event.target.checked)}>
43+
Vis kun manglende oversettelser
44+
</Switch>
45+
</div>
46+
<TranslationTable
47+
loading={loading || !sortedRows}
48+
sort={sortState}
49+
onSortChange={handleSort}
50+
stickyHeaderClassname={stickyStyles.mainTable}
51+
>
4352
{sortedRows?.map((row) => (
4453
<TranslationRow
4554
key={row.key}

packages/bygger/src/translations/global/GlobalTranslationsTable.tsx

+13-4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { useEditGlobalTranslations } from '../../context/translations/EditGlobal
66
import NewTranslationRow from '../components/NewTranslationRow';
77
import TranslationRow from '../components/TranslationRow';
88
import TranslationTable from '../components/TranslationTable';
9+
import { useStickyStyles } from '../components/styles';
910

1011
interface Props {
1112
translations: FormsApiGlobalTranslation[] | undefined;
@@ -17,6 +18,7 @@ const GlobalTranslationsTable = ({ translations, addNewRow, loading = false }: P
1718
const [isFilterChecked, setIsFilterChecked] = useState(false);
1819
const [sortState, setSortState] = useState<SortState>();
1920
const { updateTranslation, errors, editState } = useEditGlobalTranslations();
21+
const stickyStyles = useStickyStyles();
2022

2123
const handleSort = (sortKey: string) => {
2224
setSortState((currentState) => {
@@ -40,10 +42,17 @@ const GlobalTranslationsTable = ({ translations, addNewRow, loading = false }: P
4042

4143
return (
4244
<>
43-
<Switch checked={isFilterChecked} onChange={(event) => setIsFilterChecked(event.target.checked)}>
44-
Vis kun manglende oversettelser
45-
</Switch>
46-
<TranslationTable loading={loading || !sortedRows} sort={sortState} onSortChange={handleSort}>
45+
<div className={stickyStyles.filterRow}>
46+
<Switch checked={isFilterChecked} onChange={(event) => setIsFilterChecked(event.target.checked)}>
47+
Vis kun manglende oversettelser
48+
</Switch>
49+
</div>
50+
<TranslationTable
51+
loading={loading || !sortedRows}
52+
sort={sortState}
53+
onSortChange={handleSort}
54+
stickyHeaderClassname={stickyStyles.mainTable}
55+
>
4756
{addNewRow && <NewTranslationRow />}
4857
{sortedRows?.map((row) => (
4958
<TranslationRow

0 commit comments

Comments
 (0)