Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
316245a
feat: save IRI when saving dataset organisations
EmmanuelDemey Nov 27, 2025
bb4ec57
feat: be able to display a list of codes list
EmmanuelDemey Nov 27, 2025
a24275a
fix: review DDI Export
EmmanuelDemey Nov 27, 2025
115e3d9
fix: small fixes for DDI
EmmanuelDemey Dec 1, 2025
95e87c1
feat: improve multi input component
EmmanuelDemey Dec 2, 2025
c313f8a
feat: be able to create/delete/update variables
EmmanuelDemey Dec 3, 2025
cab1d1c
feat: be able to see DDI3 XML / Duplicated variables
EmmanuelDemey Dec 4, 2025
18784b5
feat: migrate edition component to function
EmmanuelDemey Dec 4, 2025
b2f6dd7
feat: update documentation dependencies
EmmanuelDemey Dec 8, 2025
3905d1e
feat: be able to save a codes list
EmmanuelDemey Dec 10, 2025
0ee7c50
feat: use usePermission hook
EmmanuelDemey Dec 10, 2025
5ccaf2e
feat: create OPEN_DOCUMENT constant
EmmanuelDemey Dec 10, 2025
4a66085
feat: review folder structure
EmmanuelDemey Dec 15, 2025
72d46d3
Bump version from 4.16.0-rc1 to 4.17.0-rc0
rkouere Dec 16, 2025
f67b24e
feat: commit before reviewing i18next
EmmanuelDemey Dec 17, 2025
a815651
feat: improve i18n
EmmanuelDemey Dec 17, 2025
be3f4a5
fix: update physical instance
EmmanuelDemey Dec 18, 2025
c338d7b
feat: init dataset select option for distribution
EmmanuelDemey Dec 16, 2025
a10cd29
feat: migrate to oxfmt
EmmanuelDemey Dec 16, 2025
eab157e
feat: update DOMPurify
EmmanuelDemey Dec 16, 2025
c6fc206
fix: oxfmt --check
EmmanuelDemey Dec 16, 2025
78e1e07
feat: update vite and vitest
EmmanuelDemey Dec 16, 2025
cc9c0de
fix: format
EmmanuelDemey Dec 16, 2025
6343403
fix: remove duplicated url
EmmanuelDemey Dec 16, 2025
a442039
feat: update physical instance
EmmanuelDemey Dec 18, 2025
405471e
feat: format
EmmanuelDemey Dec 18, 2025
097fa2d
feat: add BasedOn for Physical Instance
EmmanuelDemey Dec 23, 2025
86a90aa
feat: format code
EmmanuelDemey Dec 23, 2025
9f486a7
feat: remove authType from redux
EmmanuelDemey Dec 23, 2025
ba080a3
fix: remove unused imports or variable
EmmanuelDemey Dec 23, 2025
00937fb
feat: remove all stamp checks from Redux
EmmanuelDemey Dec 24, 2025
a6a8e55
Bump version from 4.17.0-rc0 to 4.17.0-rc2
rkouere Jan 5, 2026
07b7c70
feat: update DDI
EmmanuelDemey Jan 7, 2026
5c2ac23
fix: format code
EmmanuelDemey Jan 7, 2026
9226a0a
feat: be able to save a codes list without codes
EmmanuelDemey Jan 9, 2026
02dd8ab
fix: add missing file
EmmanuelDemey Jan 9, 2026
aa27593
feat: format code
EmmanuelDemey Jan 15, 2026
cdbefd5
chore: 4.18.0
EmmanuelDemey Jan 15, 2026
9a77ffa
feat: display Groups and Study Unit inputs
EmmanuelDemey Jan 15, 2026
08595f4
feat: create a generic useBlocker hook
EmmanuelDemey Jan 16, 2026
d4e56ff
Bump version from 4.17.0-rc2 to 4.17.0-rc3
rkouere Jan 16, 2026
d06ad11
Bump version from 4.17.0-rc3 to 4.17.0-rc4
rkouere Jan 16, 2026
f1660f7
fix: improve DDI pages
EmmanuelDemey Jan 16, 2026
6f9b7ad
fix: format code
EmmanuelDemey Jan 16, 2026
c6810f7
fix: solve issues when publishing collections
EmmanuelDemey Jan 20, 2026
79131f8
fix: rewrite collections publication et export
EmmanuelDemey Jan 20, 2026
b3d499a
fix: format files
EmmanuelDemey Jan 20, 2026
81d32a1
ci: update package.json to 4.17.0-rc5
PierreVasseur Jan 20, 2026
f474717
Merge pull request #1415 from InseeFr/fix/solve-issue-concept-collection
PierreVasseur Jan 20, 2026
2f85dde
chore: 4.18.0
EmmanuelDemey Jan 15, 2026
f516c32
Merge branch 'feat/group-study-unit' into 4.18.0
EmmanuelDemey Jan 21, 2026
e2681e0
Merge branch 'fix/gobal-use-blocker' into 4.18.0
EmmanuelDemey Jan 21, 2026
97f06f5
fix: solve issue
EmmanuelDemey Jan 21, 2026
c189ec9
fix: format code
EmmanuelDemey Jan 21, 2026
cfeefc1
fix: solve issue when fetching codes list for DDI
EmmanuelDemey Jan 22, 2026
aaf01d7
ci: update version to 4.18.0-rc1
PierreVasseur Jan 22, 2026
6f38173
refactor: readonly props (#1416)
EmmanuelDemey Jan 27, 2026
4ed0b61
feat: remove redux (#1417)
EmmanuelDemey Jan 27, 2026
5b691ee
fix: reset codes list form
EmmanuelDemey Jan 27, 2026
5696afd
Merge pull request #1424 from InseeFr/fix/reset-codes-list-form
PierreVasseur Jan 27, 2026
c4896a4
feat: review how to create codes
EmmanuelDemey Jan 27, 2026
423ddef
feat: format code
EmmanuelDemey Jan 27, 2026
135aa2b
Merge pull request #1425 from InseeFr/feat/review-code-creation
PierreVasseur Jan 27, 2026
deaa908
feat: sticky panel (#1426)
EmmanuelDemey Feb 9, 2026
fa2abf8
feat: sticky MSD menu (#1429)
EmmanuelDemey Feb 9, 2026
9f0fdac
feat: color hilighting (#1434)
EmmanuelDemey Feb 9, 2026
ef40039
Merge branch 'main' into 4.18.0
EmmanuelDemey Feb 9, 2026
2db37b9
fix: solve lint issues
EmmanuelDemey Feb 9, 2026
a0d49f9
Merge remote-tracking branch 'origin/4.18.0' into 4.18.0
EmmanuelDemey Feb 9, 2026
1f2e65c
fix: remove unnecessary escape character in regex
EmmanuelDemey Feb 9, 2026
10d69fd
fix: delete files
EmmanuelDemey Feb 9, 2026
95cb8e4
chore: remove redux dependencies from package.json
EmmanuelDemey Feb 9, 2026
c18a6be
chore: regenerate pnpm-lock.yaml to sync with documentation/package.json
EmmanuelDemey Feb 9, 2026
ae18b5f
fix: downgrade zod to v3 in documentation for Astro compatibility
EmmanuelDemey Feb 9, 2026
a9d203e
Bump version to 4.18.0-rc2
rkouere Feb 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion documentation/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"astro-mermaid": "^1.2.0",
"mermaid": "^11.12.2",
"typescript": "^5.9.3",
"zod": "^4.3.5"
"zod": "^3.25.76"
},
"devDependencies": {
"sharp": "^0.34.5"
Expand Down
6 changes: 2 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "bauhaus",
"version": "4.17.0",
"version": "4.18.0-rc2",
"type": "module",
"description": "Web application for the management of concepts, classifications and other statistical objects",
"repository": {
Expand Down Expand Up @@ -91,6 +91,7 @@
"draftjs-md-converter": "1.5.2",
"events": "^3.3.0",
"file-saver": "1.3.3",
"highlight.js": "^11.11.1",
"i18next": "^25.5.3",
"oidc-spa": "^5.3.0",
"primeflex": "^4.0.0",
Expand All @@ -103,11 +104,8 @@
"react-dropzone": "11.0.1",
"react-i18next": "^16.0.0",
"react-modal": "^3.14.4",
"react-redux": "^7.2.6",
"react-router-dom": "6.27.0",
"react-sliding-side-panel": "1.1.8",
"redux": "^4.2.0",
"redux-thunk": "^2.4.2",
"typescript": "5.7.3",
"zod": "^4.0.0"
}
Expand Down
289 changes: 147 additions & 142 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

31 changes: 13 additions & 18 deletions src/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { createRoot } from "react-dom/client";
import { Provider } from "react-redux";

import { ApplicationTitle } from "@components/application-title";

Expand All @@ -11,7 +10,6 @@ import Root from "./packages/application/router";
import { OidcProvider } from "./packages/auth/create-oidc";
import BackToTop from "./packages/components/back-to-top";
import D from "./packages/deprecated-locales";
import configureStore from "./packages/redux/configure-store";
import "./packages/styles/main.scss";
import { getLang } from "./packages/utils/dictionnary";

Expand Down Expand Up @@ -50,7 +48,6 @@ const renderApp = (
props?: { home: true },
) => {
const { authType, lg1, lg2, version, ...properties } = initState;
const store = configureStore({});

document.querySelector("html")!.setAttribute("lang", getLang());

Expand All @@ -60,21 +57,19 @@ const renderApp = (
root.render(
<OidcProvider fallback={<>Checking authentication ⌛️</>}>
<QueryClientProvider client={queryClient}>
<Provider store={store}>
<AppContextProvider
lg1={lg1}
lg2={lg2}
version={version}
properties={properties}
authType={authType}
>
<ApplicationTitle />
<main>
<Component {...props} />
<BackToTop />
</main>
</AppContextProvider>
</Provider>
<AppContextProvider
lg1={lg1}
lg2={lg2}
version={version}
properties={properties}
authType={authType}
>
<ApplicationTitle />
<main>
<Component {...props} />
<BackToTop />
</main>
</AppContextProvider>
</QueryClientProvider>
</OidcProvider>,
);
Expand Down
17 changes: 14 additions & 3 deletions src/packages/components/business/creators-view/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ interface OrganisationMapperProps {
* Uses the V2 stamps map to retrieve organisation names.
* Falls back to displaying the ID if no label is found.
*/
const InseeOrganisationProvider = ({ organisations, children }: OrganisationMapperProps) => {
const InseeOrganisationProvider = ({
organisations,
children,
}: Readonly<OrganisationMapperProps>) => {
const stampsMap = useV2StampsMap();

const mappedLabels = useMemo(() => {
Expand Down Expand Up @@ -52,7 +55,11 @@ export const InseeOrganisationList = ({
return (
<InseeOrganisationProvider organisations={organisations}>
{(response) => (
<List<string> items={response} getContent={(item) => item} getKey={(item) => item} />
<List<string>
items={response}
getContent={(item) => item}
getKey={(item, index) => item || `org-${index}`}
/>
)}
</InseeOrganisationProvider>
);
Expand Down Expand Up @@ -90,7 +97,11 @@ export const InseeOrganisationNotes = ({
organisationsArray.length === 1 ? (
<p>{response[0]}</p>
) : (
<List<string> items={response} getContent={(item) => item} getKey={(item) => item} />
<List<string>
items={response}
getContent={(item) => item}
getKey={(item, index) => item || `org-${index}`}
/>
);

return <Note text={text} title={D1.creatorTitle} alone={true} allowEmpty={true} />;
Expand Down
8 changes: 4 additions & 4 deletions src/packages/components/ui/list/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@ import { ReactNode } from "react";
interface ListTypes<T> {
items: T[];
getContent?: (value: T) => string | ReactNode;
getKey?: (value: T) => string;
getKey?: (value: T, index: number) => string;
}

export const List = <T,>({
items,
getContent = (value: T) => String(value),
getKey = (value: T) => String(value),
getKey = (value: T, index: number) => String(value) || `item-${index}`,
}: Readonly<ListTypes<T>>) => {
if (!items || items.length === 0) {
return null;
}
return (
<ul>
{items.map((item) => (
<li key={getKey(item)}>{getContent(item)}</li>
{items.map((item, index) => (
<li key={getKey(item, index)}>{getContent(item)}</li>
))}
</ul>
);
Expand Down
2 changes: 1 addition & 1 deletion src/packages/components/ui/select/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const Select = ({
multi = false,
required = false,
filter = false,
}: SelectProps) => {
}: Readonly<SelectProps>) => {
return (
<>
{required ? <LabelRequired>{label}</LabelRequired> : <label>{label}</label>}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { useQuery } from "@tanstack/react-query";

import { ClassificationsApi } from "@sdk/classification";

interface LevelGeneral {
id: string;
classificationId: string;
prefLabelLg1: string;
prefLabelLg2?: string;
[key: string]: unknown;
}

interface LevelMember {
id: string;
label: string;
[key: string]: unknown;
}

interface Level {
general: LevelGeneral;
members: LevelMember[];
}

export const useClassificationLevel = (
classificationId: string,
levelId: string,
): { isLoading: boolean; level?: Level } => {
const { isLoading: isLoadingGeneral, data: general } = useQuery<LevelGeneral>({
queryKey: ["classification-level-general", classificationId, levelId],
queryFn: () => ClassificationsApi.getClassificationLevelGeneral(classificationId, levelId),
enabled: !!classificationId && !!levelId,
});

const { isLoading: isLoadingMembers, data: members } = useQuery<LevelMember[]>({
queryKey: ["classification-level-members", classificationId, levelId],
queryFn: () => ClassificationsApi.getClassificationLevelMembers(classificationId, levelId),
enabled: !!classificationId && !!levelId,
});

const isLoading = isLoadingGeneral || isLoadingMembers;
const level = general && members ? { general, members } : undefined;

return { isLoading, level };
};
22 changes: 4 additions & 18 deletions src/packages/modules-classifications/level/home-container.jsx
Original file line number Diff line number Diff line change
@@ -1,30 +1,16 @@
import { useEffect } from "react";
import { connect, useSelector } from "react-redux";
import { useParams } from "react-router-dom";

import { Loading } from "@components/loading";

import loadLevel from "../../redux/actions/classifications/level";
import { getLevel } from "../../redux/classifications/level";
import { useClassificationLevel } from "../hooks/useClassificationLevel";
import { useSecondLang } from "../../utils/hooks/second-lang";
import LevelVisualization from "./home";

const LevelVisualizationContainer = ({ loadLevel }) => {
export const Component = () => {
const { classificationId, levelId } = useParams();
const level = useSelector((state) => getLevel(state, classificationId, levelId));
const { isLoading, level } = useClassificationLevel(classificationId, levelId);
const [secondLang] = useSecondLang();

const currentLevelId = level?.id;
useEffect(() => {
if (currentLevelId !== levelId) loadLevel(classificationId, levelId);
}, [currentLevelId, classificationId, levelId, loadLevel]);

if (!level) return <Loading />;
if (isLoading || !level) return <Loading />;
return <LevelVisualization level={level} secondLang={secondLang} />;
};

const mapDispatchToProps = {
loadLevel,
};

export const Component = connect(undefined, mapDispatchToProps)(LevelVisualizationContainer);
Loading
Loading