💄 front: cosmetic changes (#50)
This commit is contained in:
committed by
ericlinagora
parent
62dcb71c8a
commit
f803e4cc51
@@ -51,7 +51,6 @@
|
|||||||
"scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "Administration",
|
"scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "Administration",
|
||||||
"scenes.app.workspaces.create_company.group_data.group_main_activity.other": "Other",
|
"scenes.app.workspaces.create_company.group_data.group_main_activity.other": "Other",
|
||||||
"components.drive_dropzone.uploading": "Uploading...",
|
"components.drive_dropzone.uploading": "Uploading...",
|
||||||
"components.user_picker.modal_results_count_none": "No results found",
|
|
||||||
"components.user_picker.modal.result_add.none": "No rights",
|
"components.user_picker.modal.result_add.none": "No rights",
|
||||||
"components.user_picker.modal.result_add.read": "Grant read",
|
"components.user_picker.modal.result_add.read": "Grant read",
|
||||||
"components.user_picker.modal.result_add.write": "Grant write",
|
"components.user_picker.modal.result_add.write": "Grant write",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ export type ConfirmModalProps = {
|
|||||||
title: string;
|
title: string;
|
||||||
text: string;
|
text: string;
|
||||||
theme?: ModalContentTheme;
|
theme?: ModalContentTheme;
|
||||||
icon: React.ComponentType;
|
icon?: React.ComponentType;
|
||||||
skipCancelOnClose?: boolean;
|
skipCancelOnClose?: boolean;
|
||||||
buttonOkTheme?: ButtonTheme;
|
buttonOkTheme?: ButtonTheme;
|
||||||
buttonOkLabel: string;
|
buttonOkLabel: string;
|
||||||
@@ -40,17 +40,17 @@ export const ConfirmModal = (props: ConfirmModalProps) => {
|
|||||||
<>
|
<>
|
||||||
<Button
|
<Button
|
||||||
className="ml-2"
|
className="ml-2"
|
||||||
theme='default'
|
|
||||||
onClick={dialogCloseHandler(false)}
|
|
||||||
>
|
|
||||||
{Languages.t(props.buttonCancelLabel || "general.cancel")}
|
|
||||||
</Button>
|
|
||||||
<Button
|
|
||||||
theme={props.buttonOkTheme || "danger"}
|
theme={props.buttonOkTheme || "danger"}
|
||||||
onClick={dialogCloseHandler(true)}
|
onClick={dialogCloseHandler(true)}
|
||||||
>
|
>
|
||||||
{Languages.t(props.buttonOkLabel)}
|
{Languages.t(props.buttonOkLabel)}
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button
|
||||||
|
theme='default'
|
||||||
|
onClick={dialogCloseHandler(false)}
|
||||||
|
>
|
||||||
|
{Languages.t(props.buttonCancelLabel || "general.cancel")}
|
||||||
|
</Button>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ interface UserBlockProps {
|
|||||||
subtitle_suffix?: JSX.Element | string | false;
|
subtitle_suffix?: JSX.Element | string | false;
|
||||||
user?: UserType;
|
user?: UserType;
|
||||||
isSelf?: boolean;
|
isSelf?: boolean;
|
||||||
|
onClick?: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function UserBlock(props: UserBlockProps) {
|
export default function UserBlock(props: UserBlockProps) {
|
||||||
@@ -22,7 +23,7 @@ export default function UserBlock(props: UserBlockProps) {
|
|||||||
suffix={props.suffix}
|
suffix={props.suffix}
|
||||||
title_suffix={props.title_suffix}
|
title_suffix={props.title_suffix}
|
||||||
subtitle_suffix={props.subtitle_suffix}
|
subtitle_suffix={props.subtitle_suffix}
|
||||||
|
onClick={props.onClick}
|
||||||
avatar={
|
avatar={
|
||||||
<Avatar
|
<Avatar
|
||||||
avatar={props.user?.thumbnail || ''}
|
avatar={props.user?.thumbnail || ''}
|
||||||
|
|||||||
+3
-1
@@ -25,6 +25,7 @@ export const AccessLevelDropdown = ({
|
|||||||
labelOverrides,
|
labelOverrides,
|
||||||
className,
|
className,
|
||||||
size,
|
size,
|
||||||
|
noRedBobMode,
|
||||||
}: {
|
}: {
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
level: DriveFileAccessLevel | null;
|
level: DriveFileAccessLevel | null;
|
||||||
@@ -33,6 +34,7 @@ export const AccessLevelDropdown = ({
|
|||||||
labelOverrides?: { [key: string]: string };
|
labelOverrides?: { [key: string]: string };
|
||||||
hiddenLevels?: DriveFileAccessLevelOrRemove[] | string[];
|
hiddenLevels?: DriveFileAccessLevelOrRemove[] | string[];
|
||||||
size?: SelectSize,
|
size?: SelectSize,
|
||||||
|
noRedBobMode?: boolean,
|
||||||
}) => {
|
}) => {
|
||||||
const createOption = (level: DriveFileAccessLevelOrRemove) =>
|
const createOption = (level: DriveFileAccessLevelOrRemove) =>
|
||||||
!hiddenLevels?.includes(level) && <option value={level}>{(labelOverrides || {})[level] || translateAccessLevel(level)}</option>;
|
!hiddenLevels?.includes(level) && <option value={level}>{(labelOverrides || {})[level] || translateAccessLevel(level)}</option>;
|
||||||
@@ -41,7 +43,7 @@ export const AccessLevelDropdown = ({
|
|||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
size={size}
|
size={size}
|
||||||
className={className + ' w-auto'}
|
className={className + ' w-auto'}
|
||||||
theme={level === 'none' ? 'rose' : 'outline'}
|
theme={(!noRedBobMode && level === 'none') ? 'rose' : 'outline'}
|
||||||
value={level || 'none'}
|
value={level || 'none'}
|
||||||
onChange={e => onChange(e.target.value as DriveFileAccessLevel & 'remove')}
|
onChange={e => onChange(e.target.value as DriveFileAccessLevel & 'remove')}
|
||||||
>
|
>
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ export const CopyLinkButton = (props: {
|
|||||||
}}
|
}}
|
||||||
disabled={!haveTextToCopy}
|
disabled={!haveTextToCopy}
|
||||||
theme={didJustCompleteACopy ? "green" : "primary"}
|
theme={didJustCompleteACopy ? "green" : "primary"}
|
||||||
className="justify-center"
|
className="justify-center w-64"
|
||||||
>
|
>
|
||||||
{ didJustCompleteACopy
|
{ didJustCompleteACopy
|
||||||
? <CheckCircleIcon className="w-5 mr-2" />
|
? <CheckCircleIcon className="w-5 mr-2" />
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import A from '@atoms/link';
|
|||||||
import { Subtitle } from '@atoms/text';
|
import { Subtitle } from '@atoms/text';
|
||||||
import { LockClosedIcon, EyeIcon, PencilIcon, ScaleIcon, EyeOffIcon } from '@heroicons/react/outline';
|
import { LockClosedIcon, EyeIcon, PencilIcon, ScaleIcon, EyeOffIcon } from '@heroicons/react/outline';
|
||||||
import { Modal, ModalContent } from '@atoms/modal';
|
import { Modal, ModalContent } from '@atoms/modal';
|
||||||
import { PublicLinkAccessOptions } from '../public-link/public-link-access-options';
|
import { PublicLinkAccessOptions } from './public-link-access-options';
|
||||||
import BaseBlock from '@molecules/grouped-rows/base';
|
import BaseBlock from '@molecules/grouped-rows/base';
|
||||||
import { AccessLevelDropdown, translateAccessLevel } from '../../components/access-level-dropdown';
|
import { AccessLevelDropdown, translateAccessLevel } from '../../components/access-level-dropdown';
|
||||||
import { CopyLinkButton } from './copy-link-button';
|
import { CopyLinkButton } from './copy-link-button';
|
||||||
@@ -93,7 +93,7 @@ const SwitchToAdvancedSettingsRow = (props: {
|
|||||||
title={Languages.t('components.public-link-security')}
|
title={Languages.t('components.public-link-security')}
|
||||||
suffix={
|
suffix={
|
||||||
<A
|
<A
|
||||||
className={"pr-4 inline-block" + (props.disabled ? ' !text-zinc-500' : '')}
|
className={"pr-4 inline-block " + (props.disabled ? '!text-zinc-500' : '!text-zinc-800')}
|
||||||
disabled={props.disabled}
|
disabled={props.disabled}
|
||||||
noColor={props.disabled}
|
noColor={props.disabled}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@@ -114,8 +114,7 @@ const PublicLinkModalContent = (props: {
|
|||||||
}) => {
|
}) => {
|
||||||
const { id } = props;
|
const { id } = props;
|
||||||
const { item, access, loading, update, refresh } = useDriveItem(id);
|
const { item, access, loading, update, refresh } = useDriveItem(id);
|
||||||
const { item: parentItem } = useDriveItem(item?.parent_id || '');
|
const { refresh: refreshCompany } = useCurrentCompany();
|
||||||
const { company, refresh: refreshCompany } = useCurrentCompany();
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
refresh(id);
|
refresh(id);
|
||||||
refreshCompany();
|
refreshCompany();
|
||||||
|
|||||||
+2
-4
@@ -80,7 +80,7 @@ export const PasswordEditorRow = (props: {
|
|||||||
<label htmlFor={chkPasswordId}>{Languages.t('components.public-link-security_password')}</label>
|
<label htmlFor={chkPasswordId}>{Languages.t('components.public-link-security_password')}</label>
|
||||||
{!!props.password?.length && !isEditingPassword &&
|
{!!props.password?.length && !isEditingPassword &&
|
||||||
<a
|
<a
|
||||||
className={disabled ? Styles.Disabled.Yes : ""}
|
className={disabled ? Styles.Disabled.Yes : "!text-zinc-800"}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (!disabled) {
|
if (!disabled) {
|
||||||
setCurrentEditedPassword(props.password!);
|
setCurrentEditedPassword(props.password!);
|
||||||
@@ -140,9 +140,7 @@ export const PasswordEditorRow = (props: {
|
|||||||
open={isConfirmingPasswordRemoval}
|
open={isConfirmingPasswordRemoval}
|
||||||
title={Languages.t("components.public-link-security_password_removal_title")}
|
title={Languages.t("components.public-link-security_password_removal_title")}
|
||||||
text={Languages.t("components.public-link-security_password_removal_body")}
|
text={Languages.t("components.public-link-security_password_removal_body")}
|
||||||
theme="danger"
|
buttonOkTheme='primary'
|
||||||
icon={ShieldExclamationIcon}
|
|
||||||
buttonOkTheme='danger'
|
|
||||||
buttonOkLabel='components.public-link-security_password_removal_confirm'
|
buttonOkLabel='components.public-link-security_password_removal_confirm'
|
||||||
|
|
||||||
onClose={() => setIsConfirmingPasswordRemoval(false)}
|
onClose={() => setIsConfirmingPasswordRemoval(false)}
|
||||||
|
|||||||
@@ -25,25 +25,25 @@ export const AccessModalAtom = atom<AccessModalType>({
|
|||||||
|
|
||||||
export const AccessModal = () => {
|
export const AccessModal = () => {
|
||||||
const [state, setState] = useRecoilState(AccessModalAtom);
|
const [state, setState] = useRecoilState(AccessModalAtom);
|
||||||
|
const closeModal = () => setState({ ...state, open: false });
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
open={state.open}
|
open={state.open}
|
||||||
className='!overflow-visible'
|
className='!overflow-visible'
|
||||||
onClose={() => setState({ ...state, open: false })}
|
onClose={closeModal}
|
||||||
>
|
>
|
||||||
{!!state.id && <AccessModalContent id={state.id} />}
|
{!!state.id && <AccessModalContent id={state.id} onCloseModal={closeModal} />}
|
||||||
</Modal>
|
</Modal>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const AccessModalContent = (props: {
|
const AccessModalContent = (props: {
|
||||||
id: string,
|
id: string,
|
||||||
|
onCloseModal: () => void,
|
||||||
}) => {
|
}) => {
|
||||||
const { id } = props;
|
const { id } = props;
|
||||||
const { item, access, loading, update, refresh } = useDriveItem(id);
|
const { item, access, loading, update, refresh } = useDriveItem(id);
|
||||||
const { item: parentItem } = useDriveItem(item?.parent_id || '');
|
const { refresh: refreshCompany } = useCurrentCompany();
|
||||||
const { company, refresh: refreshCompany } = useCurrentCompany();
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
refresh(id);
|
refresh(id);
|
||||||
refreshCompany();
|
refreshCompany();
|
||||||
@@ -60,7 +60,7 @@ const AccessModalContent = (props: {
|
|||||||
>
|
>
|
||||||
<div className={loading ? 'opacity-50' : ''}>
|
<div className={loading ? 'opacity-50' : ''}>
|
||||||
{FeatureTogglesService.isActiveFeatureName(FeatureNames.COMPANY_SEARCH_USERS) && (
|
{FeatureTogglesService.isActiveFeatureName(FeatureNames.COMPANY_SEARCH_USERS) && (
|
||||||
<InternalAccessManager id={id} disabled={access !== 'manage'} />
|
<InternalAccessManager id={id} disabled={access !== 'manage'} onCloseModal={props.onCloseModal} />
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</ModalContent>
|
</ModalContent>
|
||||||
|
|||||||
+26
-6
@@ -17,7 +17,15 @@ import { InputDecorationIcon } from '@atoms/input/input-decoration-icon';
|
|||||||
import { AccessLevelDropdown } from '../../components/access-level-dropdown';
|
import { AccessLevelDropdown } from '../../components/access-level-dropdown';
|
||||||
import UserBlock from '@molecules/grouped-rows/user';
|
import UserBlock from '@molecules/grouped-rows/user';
|
||||||
|
|
||||||
export const InternalAccessManager = ({ id, disabled }: { id: string; disabled: boolean }) => {
|
export const InternalAccessManager = ({
|
||||||
|
id,
|
||||||
|
disabled,
|
||||||
|
onCloseModal,
|
||||||
|
}: {
|
||||||
|
id: string;
|
||||||
|
disabled: boolean;
|
||||||
|
onCloseModal: () => void,
|
||||||
|
}) => {
|
||||||
const { item, loading, update } = useDriveItem(id);
|
const { item, loading, update } = useDriveItem(id);
|
||||||
const [level, setLevel] = useState<DriveFileAccessLevel>('manage');
|
const [level, setLevel] = useState<DriveFileAccessLevel>('manage');
|
||||||
const usersWithAccess = item && getAllUserAccesses(item);
|
const usersWithAccess = item && getAllUserAccesses(item);
|
||||||
@@ -113,6 +121,7 @@ export const InternalAccessManager = ({ id, disabled }: { id: string; disabled:
|
|||||||
<div className="shrink-0">
|
<div className="shrink-0">
|
||||||
<AccessLevelDropdown
|
<AccessLevelDropdown
|
||||||
className="rounded-l-none !p-0 leading-tight text-end !pr-8 !pl-2 border-none bg-zinc-100 dark:bg-zinc-800"
|
className="rounded-l-none !p-0 leading-tight text-end !pr-8 !pl-2 border-none bg-zinc-100 dark:bg-zinc-800"
|
||||||
|
noRedBobMode={true}
|
||||||
disabled={loading || disabled}
|
disabled={loading || disabled}
|
||||||
hiddenLevels={['remove']}
|
hiddenLevels={['remove']}
|
||||||
level={level}
|
level={level}
|
||||||
@@ -122,16 +131,16 @@ export const InternalAccessManager = ({ id, disabled }: { id: string; disabled:
|
|||||||
</div>
|
</div>
|
||||||
{showResults &&
|
{showResults &&
|
||||||
<>
|
<>
|
||||||
<div className="flex flex-row border-t !border-x-0 dark:border-zinc-700 h-1" />
|
<div className="flex flex-row border-t !border-x-0 dark:border-zinc-700" />
|
||||||
<div className="relative w-full h-0"> {/* Necessary so the relative results don't take height */}
|
<div className="relative w-full h-0"> {/* Necessary so the relative results don't take height */}
|
||||||
<div className={(showResults ? "rounded-md " : "rounded-md ") + "absolute z-10 w-full shadow-md border bg-white dark:bg-zinc-900 mt-2 dark:border-zinc-700"}>
|
<div className={"rounded-md absolute z-10 w-full shadow-md border bg-white dark:bg-zinc-900 mt-1 dark:border-zinc-700"}>
|
||||||
{ shownResults && shownResults.map((user, index) =>
|
{ shownResults && shownResults.map((user, index) =>
|
||||||
<UserAccessLevel
|
<UserAccessLevel
|
||||||
key={user.id}
|
key={user.id}
|
||||||
id={id}
|
id={id}
|
||||||
userId={user.id!}
|
userId={user.id!}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
className={'!border-x-0' + (index === selectedKeyIndex ? ' ring' : (index > 0 && index !== ((selectedKeyIndex ?? 0) + 1) ? ' border-t' : ''))}
|
className={'hover:bg-zinc-300 dark:hover:bg-zinc-700 cursor-pointer !border-x-0' + (index === selectedKeyIndex ? ' ring' : (index > 0 && index !== ((selectedKeyIndex ?? 0) + 1) ? ' border-t' : ''))}
|
||||||
isSearchResultAdd={level}
|
isSearchResultAdd={level}
|
||||||
onAddSearchResult={(userId) => {
|
onAddSearchResult={(userId) => {
|
||||||
item && update(changeUserAccess(item, userId, level));
|
item && update(changeUserAccess(item, userId, level));
|
||||||
@@ -139,7 +148,7 @@ export const InternalAccessManager = ({ id, disabled }: { id: string; disabled:
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{!loading && resultFooterText && <>
|
{!loading && resultFooterText && <>
|
||||||
<div className={(result.length == 0 ? 'rounded-md' : 'rounded-b-md') + ' grow text-center italic dark:text-zinc-400 py-2 dark:border-zinc-700 border-t bg-zinc-100 dark:bg-zinc-800'}>
|
<div className={(result.length == 0 ? 'rounded-md' : 'rounded-b-md') + ' grow text-center italic text-red-700 dark:text-red-500 font-bold py-2 dark:border-zinc-700 border-t bg-zinc-100 dark:bg-zinc-800'}>
|
||||||
{resultFooterText}
|
{resultFooterText}
|
||||||
</div>
|
</div>
|
||||||
</>}
|
</>}
|
||||||
@@ -166,6 +175,16 @@ export const InternalAccessManager = ({ id, disabled }: { id: string; disabled:
|
|||||||
<div className="mt-2 flex flex-row items-center justify-center border-none h-1"> </div>
|
<div className="mt-2 flex flex-row items-center justify-center border-none h-1"> </div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
<div className="flex flex-row place-content-end">
|
||||||
|
<Button
|
||||||
|
disabled={loading || disabled}
|
||||||
|
size="sm"
|
||||||
|
className='text-center'
|
||||||
|
onClick={onCloseModal}
|
||||||
|
>
|
||||||
|
{Languages.t('components.public-link-security_field_confirm_edit')}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -186,11 +205,11 @@ const UserAccessLevel = (props: {
|
|||||||
className={"p-4 border-x dark:border-zinc-700" + ' ' + (props.className ?? '')}
|
className={"p-4 border-x dark:border-zinc-700" + ' ' + (props.className ?? '')}
|
||||||
user={user}
|
user={user}
|
||||||
isSelf={!!currentUser?.id && user?.id === currentUser?.id}
|
isSelf={!!currentUser?.id && user?.id === currentUser?.id}
|
||||||
|
onClick={() => props.isSearchResultAdd && user && props.onAddSearchResult!(props.userId)}
|
||||||
suffix={
|
suffix={
|
||||||
props.isSearchResultAdd
|
props.isSearchResultAdd
|
||||||
? <Button
|
? <Button
|
||||||
disabled={loading || props.disabled || user?.id === currentUser?.id}
|
disabled={loading || props.disabled || user?.id === currentUser?.id}
|
||||||
onClick={() => user && props.onAddSearchResult!(props.userId)}
|
|
||||||
size="sm"
|
size="sm"
|
||||||
>
|
>
|
||||||
{Languages.t('components.user_picker.modal.result_add.' + props.isSearchResultAdd)}
|
{Languages.t('components.user_picker.modal.result_add.' + props.isSearchResultAdd)}
|
||||||
@@ -198,6 +217,7 @@ const UserAccessLevel = (props: {
|
|||||||
|
|
||||||
: <AccessLevelDropdown
|
: <AccessLevelDropdown
|
||||||
disabled={loading || props.disabled || user?.id === currentUser?.id}
|
disabled={loading || props.disabled || user?.id === currentUser?.id}
|
||||||
|
noRedBobMode={true}
|
||||||
level={(item && getUserAccessLevel(item, props.userId)) || "none"}
|
level={(item && getUserAccessLevel(item, props.userId)) || "none"}
|
||||||
onChange={level => item && update(changeUserAccess(item, props.userId, level === 'remove' ? false : level))}
|
onChange={level => item && update(changeUserAccess(item, props.userId, level === 'remove' ? false : level))}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user