intermittent commit
This commit is contained in:
@@ -5,6 +5,8 @@ import {
|
||||
Card,
|
||||
ConnectionTree,
|
||||
ConfirmDialog,
|
||||
CredentialPanel,
|
||||
DisabledActionTooltip,
|
||||
DismissibleAlert,
|
||||
Dialog,
|
||||
FormField,
|
||||
@@ -123,6 +125,9 @@ const PROVIDERS: Array<{id: Provider;label: string;}> = [
|
||||
{ id: "nextcloud", label: "i18n:govoplan-files.nextcloud.aab73a3d" },
|
||||
{ id: "seafile", label: "i18n:govoplan-files.seafile.600192cc" },
|
||||
{ id: "smb", label: "i18n:govoplan-files.smb.515d2f88" },
|
||||
{ id: "s3", label: "S3" },
|
||||
{ id: "sharepoint", label: "SharePoint" },
|
||||
{ id: "onedrive", label: "OneDrive" },
|
||||
{ id: "nfs", label: "i18n:govoplan-files.nfs.db121865" },
|
||||
{ id: "dms", label: "i18n:govoplan-files.dms.477e5652" },
|
||||
{ id: "generic", label: "i18n:govoplan-files.generic.ff7613e5" }];
|
||||
@@ -133,6 +138,9 @@ const ENDPOINT_PLACEHOLDERS: Record<Provider, string> = {
|
||||
nextcloud: "http://127.0.0.1:9081/remote.php/dav/files/admin/",
|
||||
seafile: "http://127.0.0.1:9082/",
|
||||
smb: "smb://127.0.0.1:1445/files",
|
||||
s3: "http://127.0.0.1:9000",
|
||||
sharepoint: "https://graph.microsoft.com/v1.0/sites/{site-id}/drives/{drive-id}",
|
||||
onedrive: "https://graph.microsoft.com/v1.0/drives/{drive-id}",
|
||||
nfs: "nfs://127.0.0.1/export",
|
||||
dms: "https://dms.example.test",
|
||||
generic: "https://files.example.test"
|
||||
@@ -340,6 +348,17 @@ export default function FileConnectorSettingsPanel({
|
||||
setCredentialDraft((current) => current ? { ...current, ...patch } : current);
|
||||
}
|
||||
|
||||
function patchCredentialValues(patch: {username?: string | null;password?: string | null;}) {
|
||||
const next: Partial<ConnectorCredentialDraft> = {};
|
||||
if (patch.username !== undefined) next.username = String(patch.username ?? "");
|
||||
if (patch.password !== undefined) next.password = String(patch.password ?? "");
|
||||
patchCredentialDraft(next);
|
||||
}
|
||||
|
||||
function patchCredentialToken(patch: {password?: string | null;}) {
|
||||
if (patch.password !== undefined) patchCredentialDraft({ token: String(patch.password ?? "") });
|
||||
}
|
||||
|
||||
function patchPolicyDraft(patch: Partial<CentralConnectorPolicyDraft>) {
|
||||
setPolicyDraft((current) => ({ ...current, ...patch }));
|
||||
}
|
||||
@@ -906,11 +925,11 @@ export default function FileConnectorSettingsPanel({
|
||||
footer={credentialDraft ?
|
||||
<>
|
||||
<Button onClick={closeCredentialDialog} disabled={saving}>i18n:govoplan-files.cancel.77dfd213</Button>
|
||||
<span className="disabled-action-tooltip" data-tooltip={credentialSaveTooltip}>
|
||||
<DisabledActionTooltip reason={credentialSaveTooltip}>
|
||||
<Button variant="primary" onClick={() => void saveCredentialDraft()} disabled={credentialSaveDisabled}>
|
||||
<Save size={16} aria-hidden="true" /> {saving ? "i18n:govoplan-files.saving.ae7e8875" : "i18n:govoplan-files.save_credential.2c02a6d2"}
|
||||
</Button>
|
||||
</span>
|
||||
</DisabledActionTooltip>
|
||||
</> :
|
||||
null}>
|
||||
|
||||
@@ -983,35 +1002,47 @@ export default function FileConnectorSettingsPanel({
|
||||
actor: "Connector administrator",
|
||||
target: "Credential mode"
|
||||
}} /> :
|
||||
<div className="form-grid two-column-form-grid">
|
||||
{(credentialDraft.credentialMode === "basic" || credentialDraft.credentialMode === "secret_ref") &&
|
||||
<FormField label="i18n:govoplan-files.username.84c29015">
|
||||
<input value={credentialDraft.username} disabled={saving} onChange={(event) => patchCredentialDraft({ username: event.target.value })} autoComplete="username" />
|
||||
</FormField>
|
||||
}
|
||||
<div className="file-connector-secret-fields">
|
||||
{credentialDraft.credentialMode === "basic" &&
|
||||
<FormField label="i18n:govoplan-files.password.8be3c943">
|
||||
<input value={credentialDraft.password} disabled={saving} onChange={(event) => patchCredentialDraft({ password: event.target.value })} type="password" autoComplete="new-password" placeholder={editingCredentialId ? "i18n:govoplan-files.leave_empty_to_keep_saved_password.6ec39f5e" : ""} />
|
||||
</FormField>
|
||||
}
|
||||
{credentialDraft.credentialMode === "token" &&
|
||||
<FormField label="i18n:govoplan-files.token.a1141eb9">
|
||||
<input value={credentialDraft.token} disabled={saving} onChange={(event) => patchCredentialDraft({ token: event.target.value })} type="password" placeholder={editingCredentialId ? "i18n:govoplan-files.leave_empty_to_keep_saved_token.e725857b" : ""} />
|
||||
</FormField>
|
||||
<CredentialPanel
|
||||
values={{ username: credentialDraft.username, password: credentialDraft.password }}
|
||||
onChange={patchCredentialValues}
|
||||
disabled={saving}
|
||||
savedPassword={Boolean(editingCredentialId) && !credentialDraft.clearPassword}
|
||||
savedPasswordPlaceholder="i18n:govoplan-files.leave_empty_to_keep_saved_password.6ec39f5e" />
|
||||
}
|
||||
{credentialDraft.credentialMode === "secret_ref" &&
|
||||
<FormField label="i18n:govoplan-files.secret_reference.04ed2221">
|
||||
<input value={credentialDraft.secretRef} disabled={saving} onChange={(event) => patchCredentialDraft({ secretRef: event.target.value })} />
|
||||
</FormField>
|
||||
<>
|
||||
<CredentialPanel
|
||||
values={{ username: credentialDraft.username }}
|
||||
onChange={patchCredentialValues}
|
||||
disabled={saving}
|
||||
showPassword={false} />
|
||||
<div className="form-grid two-column-form-grid">
|
||||
<FormField label="i18n:govoplan-files.secret_reference.04ed2221">
|
||||
<input value={credentialDraft.secretRef} disabled={saving} onChange={(event) => patchCredentialDraft({ secretRef: event.target.value })} />
|
||||
</FormField>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
{credentialDraft.credentialMode === "token" &&
|
||||
<CredentialPanel
|
||||
values={{ password: credentialDraft.token }}
|
||||
onChange={patchCredentialToken}
|
||||
disabled={saving}
|
||||
showUsername={false}
|
||||
passwordLabel="i18n:govoplan-files.token.a1141eb9"
|
||||
savedPassword={Boolean(editingCredentialId) && !credentialDraft.clearToken}
|
||||
savedPasswordPlaceholder="i18n:govoplan-files.leave_empty_to_keep_saved_token.e725857b" />
|
||||
}
|
||||
</div>
|
||||
}
|
||||
<div className="button-row compact-actions">
|
||||
<span className="disabled-action-tooltip" data-tooltip={credentialTestDisabled ? credentialTestTooltip : ""}>
|
||||
<DisabledActionTooltip reason={credentialTestDisabled ? credentialTestTooltip : ""}>
|
||||
<Button type="button" onClick={() => void testCredentialLogin()} disabled={credentialTestDisabled}>
|
||||
<RefreshCw size={16} aria-hidden="true" /> {testingCredentialLogin ? "Testing login" : "Test login"}
|
||||
</Button>
|
||||
</span>
|
||||
</DisabledActionTooltip>
|
||||
</div>
|
||||
{credentialLoginResult &&
|
||||
<DismissibleAlert tone={credentialLoginResult.ok ? "success" : "warning"} resetKey={credentialLoginResult.message}>
|
||||
@@ -1072,11 +1103,11 @@ export default function FileConnectorSettingsPanel({
|
||||
footer={draft ?
|
||||
<>
|
||||
<Button onClick={closeProfileDialog} disabled={saving}>i18n:govoplan-files.cancel.77dfd213</Button>
|
||||
<span className="disabled-action-tooltip" data-tooltip={profileSaveTooltip}>
|
||||
<DisabledActionTooltip reason={profileSaveTooltip}>
|
||||
<Button variant="primary" onClick={() => void saveDraft()} disabled={profileSaveDisabled}>
|
||||
<Save size={16} aria-hidden="true" /> {saving ? "i18n:govoplan-files.saving.ae7e8875" : "i18n:govoplan-files.save_connection.07796d38"}
|
||||
</Button>
|
||||
</span>
|
||||
</DisabledActionTooltip>
|
||||
</> :
|
||||
null}>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user