Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
f328e7a
feat: add papaparse dependency to enhance CSV parsing capabilities
stephdl Dec 3, 2025
3049e63
feat: enhance user import/export functionality and update related UI …
stephdl Dec 3, 2025
1bf75c5
feat: add helper text and placeholders for user input fields in Creat…
stephdl Dec 3, 2025
48f40e8
feat: update button styles for group creation in DomainGroups component
stephdl Dec 3, 2025
d1ec1de
feat: update button styles to primary for user creation in DomainUser…
stephdl Dec 3, 2025
5f45bef
feat: add ImportUsersModal component for CSV user import functionality
stephdl Dec 3, 2025
e015559
feat: remove unused breadcrumb and button elements from DomainConfigu…
stephdl Dec 3, 2025
6d0c709
feat: add import and export functionality for users in Domains component
stephdl Dec 3, 2025
6cc6ea9
feat: enhance DomainUsersAndGroups component with import/export funct…
stephdl Dec 3, 2025
e13aab8
feat: add error message for invalid CSV format in ImportUsersModal
stephdl Dec 3, 2025
347eb7e
feat: simplify tableColumns computation by removing unused conditions
stephdl Dec 4, 2025
a705f86
feat: enhance ImportUsersModal with improved layout and data table in…
stephdl Dec 4, 2025
43aa174
feat: add header row check to CSV import in ImportUsersModal
stephdl Dec 4, 2025
fd4f6e0
feat: refactor layout of DomainUsersAndGroups for improved responsive…
stephdl Dec 4, 2025
0de9f6c
feat: update label element for better accessibility in ImportUsersModal
stephdl Dec 4, 2025
a917c25
Apply suggestions from code review
stephdl Dec 4, 2025
cf842f6
feat: update placeholders in CreateOrEditUserModal for consistency an…
stephdl Dec 4, 2025
0926c8d
feat: remove unnecessary margin from label in ImportUsersModal for cl…
stephdl Dec 4, 2025
28755e6
feat: remove unnecessary size attribute from NsInlineNotification in …
stephdl Dec 4, 2025
c25fbcd
feat: update translation keys for export data and domain users in Imp…
stephdl Dec 4, 2025
d8156bd
feat: simplify modal visibility logic in DomainUsersAndGroups
stephdl Dec 4, 2025
7505543
feat: rename variable for clarity in CSV export logic in DomainUsersA…
stephdl Dec 4, 2025
f80af9c
feat: remove redundant array validation for records in DomainUsersAnd…
stephdl Dec 4, 2025
c2d6d63
feat: refactor existing user policy handling in ImportUsersModal
stephdl Dec 4, 2025
b3d89e8
feat: standardize error handling variable names in ImportUsersModal
stephdl Dec 4, 2025
d30a85e
feat: update expected column count in ImportUsersModal to use dynamic…
stephdl Dec 4, 2025
5740e8b
feat: add error message for file read errors in translation.json
stephdl Dec 4, 2025
ab098da
feat: remove isResumeConfiguration from ImportUsersModal integration
stephdl Dec 4, 2025
dd7dda5
feat: move DomainUsersAndGroups to component and update router import…
stephdl Dec 4, 2025
f1ba9de
feat: remove toggleSetupKey method from ImportUsersModal
stephdl Dec 4, 2025
b9c29f0
feat: remove newPasswordHelperText prop from CreateOrEditUserModal
stephdl Dec 5, 2025
3284efb
Apply suggestions from translation review
stephdl Dec 5, 2025
d27559d
feat: update placeholder translations in CreateOrEditUserModal
stephdl Dec 5, 2025
32692cc
fix: show domain name inside import notification
andre8244 Dec 5, 2025
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
1 change: 1 addition & 0 deletions core/ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"lodash": "^4.17.21",
"lottie-web-vue": "^1.2.0",
"mark.js": "^8.11.1",
"papaparse": "^5.5.3",
"qrcode.vue": "^1.7.0",
"uuid": "^3.4.0",
"vue": "^2.6.11",
Expand Down
44 changes: 40 additions & 4 deletions core/ui/public/i18n/en/translation.json
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@
"plus_others": "+{num} other | +{num} others",
"choose_a_node": "Choose a node",
"type": "Type",
"any": "Any"
"any": "Any",
"eg_value": "e.g. {value}"
},
"error": {
"error": "Error",
Expand Down Expand Up @@ -428,7 +429,10 @@
"restart-module": "Restart instance",
"list-alerts": "List alerts",
"list-nodes": "List nodes",
"set-note": "Set note"
"set-note": "Set note",
"import-users": "Import users",
"export-users": "Export users",
"get-password-warning": "Get password warning"
},
"network": {
"title": "Network"
Expand Down Expand Up @@ -1435,9 +1439,18 @@
"group_with_same_name": "A group with this name already exists",
"user_with_same_name": "A user with this name already exists",
"display_name_string_lte": "Must be less than or equal to 256 characters",
"mail_field": "Mail address (optional)",
"mail_field": "Email (optional)",
"mail": "Mail address",
"mail_format": "Invalid mail format"
"mail_format": "Invalid mail format",
"username_helper_text": "Must start with a letter. Only letters, numbers, hyphens and underscores are allowed",
"display_name_helper_text": "Name displayed to other users",
"confirm_password": "Confirm password",
"import_data": "Import data",
"export_data": "Export data",
"password":"Password",
"locked": "Locked",
"must_change_password": "Must change password",
"no_password_expiration": "No password expiration"
},
"domain_configuration": {
"title": "Domain configuration",
Expand Down Expand Up @@ -1718,5 +1731,28 @@
"note_description": "A short note to help identify or describe this application.",
"note_helper_text": "This note must be 100 characters or less",
"filter_applications": "Filter applications"
},
"import_users": {
"import_data": "Import data",
"upload_csv_file_description": "Upload a CSV file containing user data. If the file includes group assignments, those groups will be imported as well.",
"csv_upload_label": "Upload file",
"csv_upload_helper_text": "Max 10000 rows. Supported format: CSV",
"manage_existing_users": "Manage existing users",
"manage_existing_users_tooltip": "Specify how to handle users that already exist in the cluster. You can either skip them or overwrite their data with the values from the file.",
"skip_existing_users": "Skip existing users",
"overwrite_existing_users": "Overwrite existing users",
"preview": "Preview",
"preview_description": "{users} users and {groups} groups will be imported. Review the data contained in the CSV file; only the first 5 rows are displayed.",
"too_many_users": "File exceeds size limit. Max 10000 rows are allowed",
"invalid_csv_format": "Invalid CSV format",
"import_error": "Import error",
"import": "Import",
"delete_your_file_after_import":"Delete your file after the import",
"delete_your_file_after_import_description":"If the file contains user passwords, it's recommended to delete the CSV after the import for security reasons.",
"no_import_users": "No users to import",
"no_import_users_description": "The CSV file does not contain any user to import.",
"invalid_csv_format_not_expected_columns": "Invalid CSV format: unexpected number of columns",
"file_read_error": "File read error",
"importing_data_on_domain_name": "Importing data on domain {name}"
}
}
9 changes: 8 additions & 1 deletion core/ui/src/components/domains/CreateOrEditUserModal.vue
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
:label="$t('domain_users.username')"
:invalid-message="error.user"
:disabled="isEditing || loading.addUser || loading.alterUser"
:helper-text="$t('domain_users.username_helper_text')"
:placeholder="$t('common.eg_value', { value: 'jane.doe' })"
data-modal-primary-focus
autocomplete="off"
ref="user"
Expand All @@ -37,7 +39,9 @@
v-model.trim="displayName"
:label="$t('domain_users.display_name')"
:invalid-message="error.display_name"
:helper-text="$t('domain_users.display_name_helper_text')"
:disabled="loading.addUser || loading.alterUser"
:placeholder="$t('common.eg_value', { value: 'Jane Doe' })"
autocomplete="off"
ref="display_name"
/>
Expand All @@ -47,6 +51,9 @@
:invalid-message="error.mail"
:disabled="loading.addUser || loading.alterUser"
autocomplete="off"
:placeholder="
$t('common.eg_value', { value: '[email protected]' })
"
ref="mail"
type="email"
/>
Expand Down Expand Up @@ -78,7 +85,7 @@
<NsPasswordInput
v-if="!isEditing"
:newPasswordLabel="$t('password.password')"
:confirmPasswordLabel="$t('password.re_enter_password')"
:confirmPasswordLabel="$t('domain_users.confirm_password')"
v-model="newPassword"
@passwordValidation="onPasswordValidation"
:newPasswordInvalidMessage="$t(error.newPassword)"
Expand Down
4 changes: 2 additions & 2 deletions core/ui/src/components/domains/DomainGroups.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<cv-column>
<NsButton
v-if="domain && domain.location === 'internal'"
kind="secondary"
kind="primary"
:icon="Add20"
@click="showCreateGroupModal"
>{{ $t("domain_users.create_group") }}
Expand All @@ -23,7 +23,7 @@
$t('domain_users.cannot_make_changes_to_an_external_domain')
"
>
<NsButton kind="secondary" :icon="Add20" disabled
<NsButton kind="primary" :icon="Add20" disabled
>{{ $t("domain_users.create_group") }}
</NsButton>
</cv-tooltip>
Expand Down
4 changes: 2 additions & 2 deletions core/ui/src/components/domains/DomainUsers.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<cv-column>
<NsButton
v-if="domain && domain.location === 'internal'"
kind="secondary"
kind="primary"
:icon="Add20"
@click="showCreateUserModal"
>{{ $t("domain_users.create_user") }}
Expand All @@ -23,7 +23,7 @@
$t('domain_users.cannot_make_changes_to_an_external_domain')
"
>
<NsButton kind="secondary" :icon="Add20" disabled
<NsButton kind="primary" :icon="Add20" disabled
>{{ $t("domain_users.create_user") }}
</NsButton>
</cv-tooltip>
Expand Down
Loading