Skip to content

Commit

Permalink
feat(weg,tb): reorder disabled from context menu eythaann#412
Browse files Browse the repository at this point in the history
  • Loading branch information
luriusTM committed Feb 2, 2025
1 parent 70a47eb commit f1b892f
Show file tree
Hide file tree
Showing 17 changed files with 69 additions and 14 deletions.
3 changes: 3 additions & 0 deletions src/apps/seelenweg/i18n/translations/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ app_menu:
pin_to_right: Pin to Right
run_as: Run as Administrator
unpin: Unpin
context_menu:
reorder_disable: Lock taskbar
reorder_enable: Unlock taskbar
media:
not_playing: Nothing is playing
media_menu:
Expand Down
13 changes: 7 additions & 6 deletions src/apps/seelenweg/modules/bar/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ export function SeelenWeg() {
const settings = useSelector(Selectors.settings);
const isOverlaped = useSelector(Selectors.isOverlaped);

let isReorderDisabled: boolean = useSelector(Selectors.reorderDisabled);
const pinnedOnLeft = useSelector(Selectors.itemsOnLeft);
const pinnedOnCenter = useSelector(Selectors.itemsOnCenter);
const pinnedOnRight = useSelector(Selectors.itemsOnRight);
Expand Down Expand Up @@ -162,7 +163,7 @@ export function SeelenWeg() {
setAssociatedViewCounter((current) => calculateAssociatedViewCounter(current, isOpen));
}, []);

const projectSwItem = (item: SwItem) => ItemByType(item, shit);
const projectSwItem = (item: SwItem) => ItemByType(item, !isReorderDisabled, shit);

return (
<WithContextMenu items={getSeelenWegMenu(t, isTemporalOnlyWegBar)}>
Expand Down Expand Up @@ -224,27 +225,27 @@ export function SeelenWeg() {
);
}

function ItemByType(item: SwItem, callback: (isOpen: boolean) => void) {
function ItemByType(item: SwItem, drag: boolean, callback: (isOpen: boolean) => void) {
if (item.type === WegItemType.Pinned) {
if (
item.path.toLowerCase().endsWith('.exe') ||
item.relaunchCommand.toLowerCase().includes('.exe')
) {
return <UserApplication key={item.id} item={item} onAssociatedViewOpenChanged={callback} />;
return <UserApplication key={item.id} item={item} drag={drag} onAssociatedViewOpenChanged={callback} />;
}
return <FileOrFolder key={item.id} item={item} />;
}

if (item.type === WegItemType.Temporal) {
return <UserApplication key={item.id} item={item} onAssociatedViewOpenChanged={callback} />;
return <UserApplication key={item.id} item={item} drag={drag} onAssociatedViewOpenChanged={callback} />;
}

if (item.type === WegItemType.Media) {
return <MediaSession key={item.id} item={item} />;
return <MediaSession key={item.id} item={item} drag={drag} />;
}

if (item.type === WegItemType.StartMenu) {
return <StartMenu key={item.id} item={item} />;
return <StartMenu key={item.id} item={item} drag={drag} />;
}

return null;
Expand Down
13 changes: 12 additions & 1 deletion src/apps/seelenweg/modules/bar/menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,18 @@ import { SeelenCommand } from '@seelen-ui/lib';
import { invoke } from '@tauri-apps/api/core';
import { ItemType } from 'antd/es/menu/interface';
import { TFunction } from 'i18next';
import { useSelector } from 'react-redux';

import { store } from '../shared/store/infra';
import { dialog } from 'src/apps/settings/modules/shared/tauri/infra';

import { RootActions } from '../shared/store/app';
import { RootActions, Selectors } from '../shared/store/app';

import { Icon } from '../../../shared/components/Icon';

export function getSeelenWegMenu(t: TFunction, restrictedBar?: boolean): ItemType[] {
let isReorderDisabled: boolean = useSelector(Selectors.reorderDisabled);

if (!!restrictedBar) {
return [
{
Expand All @@ -32,6 +35,14 @@ export function getSeelenWegMenu(t: TFunction, restrictedBar?: boolean): ItemTyp
];
} else {
return [
{
key: 'reoder',
icon: <Icon iconName={!isReorderDisabled ? 'VscLock' : 'VscUnlock' } />,
label: t(!isReorderDisabled ? 'context_menu.reorder_disable' : 'context_menu.reorder_enable' ),
onClick() {
store.dispatch(RootActions.setWegReorderDisabled(!isReorderDisabled));
},
},
{
key: 'add-media-module',
label: t('taskbar_menu.media'),
Expand Down
5 changes: 3 additions & 2 deletions src/apps/seelenweg/modules/item/infra/DraggableItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,18 @@ import { cx } from '../../../../shared/styles';
interface Props extends PropsWithChildren {
item: SwItem;
className?: String;
drag?: boolean;
}

export function DraggableItem({ children, item, className }: Props) {
export function DraggableItem({ children, item, className, drag }: Props) {
const ref = useRef<HTMLDivElement>(null);

return (
<Reorder.Item
as="div"
ref={ref}
value={item}
drag
drag={drag}
className={cx('weg-item-drag-container', className)}
onDragStart={() => {
ref.current?.classList.add('dragging');
Expand Down
4 changes: 2 additions & 2 deletions src/apps/seelenweg/modules/item/infra/MediaSession.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ const MAX_LUMINANCE = 210;
const MIN_LUMINANCE = 40;
const BRIGHTNESS_MULTIPLIER = 1.5; // used in css

export function MediaSession({ item }: { item: MediaWegItem }) {
export function MediaSession({ item, drag }: { item: MediaWegItem; drag: boolean }) {
const [luminance, setLuminance] = useState(0);

const dockPosition = useSelector(Selectors.settings.position);
Expand Down Expand Up @@ -61,7 +61,7 @@ export function MediaSession({ item }: { item: MediaWegItem }) {
const isHorizontal = dockPosition === SeelenWegSide.Bottom || dockPosition === SeelenWegSide.Top;

return (
<DraggableItem item={item}>
<DraggableItem item={item} drag={drag}>
<WithContextMenu items={getMenuForItem(t, item)}>
<div
className={cx('weg-item media-session-container', {
Expand Down
5 changes: 3 additions & 2 deletions src/apps/seelenweg/modules/item/infra/StartMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,20 @@ import { getMenuForItem } from './Menu';

interface Props {
item: StartMenuWegItem;
drag: boolean;
}

const startMenuExes = ['SearchHost.exe', 'StartMenuExperienceHost.exe'];

export const StartMenu = memo(({ item }: Props) => {
export const StartMenu = memo(({ item, drag }: Props) => {
const focused = useSelector(Selectors.focusedApp);

const { t } = useTranslation();

const isStartMenuOpen = startMenuExes.some((program) => (focused?.exe || '').endsWith(program));

return (
<DraggableItem item={item}>
<DraggableItem item={item} drag={drag}>
<WithContextMenu items={getMenuForItem(t, item)}>
<div
className="weg-item"
Expand Down
4 changes: 3 additions & 1 deletion src/apps/seelenweg/modules/item/infra/UserApplication.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@ import { UserApplicationPreview } from './UserApplicationPreview';

interface Props {
item: PinnedWegItem | TemporalWegItem;
drag: boolean;
// This will be triggered in case preview or context menu is opened from this item, or both of them closed.
onAssociatedViewOpenChanged?: (isOpen: boolean) => void;
}

export const UserApplication = memo(({ item, onAssociatedViewOpenChanged }: Props) => {
export const UserApplication = memo(({ item, drag, onAssociatedViewOpenChanged }: Props) => {
const [openPreview, setOpenPreview] = useState(false);
const [openContextMenu, setOpenContextMenu] = useState(false);
const [blockUntil, setBlockUntil] = useState(moment(new Date()));
Expand Down Expand Up @@ -88,6 +89,7 @@ export const UserApplication = memo(({ item, onAssociatedViewOpenChanged }: Prop
return (
<DraggableItem
item={item}
drag={drag}
className={cx({ 'associated-view-open': openPreview || openContextMenu })}
>
<WithContextMenu
Expand Down
5 changes: 5 additions & 0 deletions src/apps/seelenweg/modules/shared/store/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ const initialState: RootState = {
itemsOnLeft: [],
itemsOnCenter: [],
itemsOnRight: [],
reorderDisabled: false,
focusedApp: null,
isOverlaped: false,
settings: (await Settings.default()).seelenweg,
Expand Down Expand Up @@ -76,6 +77,10 @@ export const RootSlice = createSlice({
}
savePinnedItems(current(state));
},
setWegReorderDisabled(state, isDisabled: PayloadAction<boolean>) {
state.reorderDisabled = isDisabled.payload;
savePinnedItems(current(state));
},
},
});

Expand Down
1 change: 1 addition & 0 deletions src/apps/seelenweg/modules/shared/store/domain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ export interface RootState extends IRootState<SeelenWegSettings> {
itemsOnLeft: SwItem[];
itemsOnCenter: SwItem[];
itemsOnRight: SwItem[];
reorderDisabled: boolean;
// ----------------------
focusedApp: FocusedApp | null;
isOverlaped: boolean;
Expand Down
1 change: 1 addition & 0 deletions src/apps/seelenweg/modules/shared/store/infra.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ function loadSettingsToStore(settings: Settings) {
}

function loadWegItemsToStore(items: WegItems) {
store.dispatch(RootActions.setReorderDisabled(items.inner.is_reorder_disabled));
store.dispatch(RootActions.setItemsOnLeft(items.inner.left));
store.dispatch(RootActions.setItemsOnCenter(items.inner.center));
store.dispatch(RootActions.setItemsOnRight(items.inner.right));
Expand Down
1 change: 1 addition & 0 deletions src/apps/seelenweg/modules/shared/store/storeApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export const savePinnedItems = debounce(
};

const data = new WegItems({
is_reorder_disabled: state.reorderDisabled,
left: state.itemsOnLeft.filter(cb),
center: state.itemsOnCenter.filter(cb),
right: state.itemsOnRight.filter(cb),
Expand Down
2 changes: 2 additions & 0 deletions src/apps/toolbar/i18n/translations/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ context_menu:
add_module: Add Module
remove: Remove Module
settings: Settings
reorder_disable: Lock toolbar
reorder_enable: Unlock toolbar
task_manager: Task Manager
media:
device:
Expand Down
3 changes: 3 additions & 0 deletions src/apps/toolbar/modules/item/infra/Inner.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,8 @@ export function InnerItem(props: InnerItemProps) {
} = props;
const { template, tooltip, onClick: oldOnClick, onClickV2, style, id, badge } = module;

const structure = useSelector(Selectors.items);

const [mounted, setMounted] = React.useState(false);
const env = useSelector(Selectors.env);

Expand Down Expand Up @@ -226,6 +228,7 @@ export function InnerItem(props: InnerItemProps) {
<Reorder.Item
{...rest}
id={id}
drag={!structure.isReorderDisabled}
value={(module as any).__value__ || module}
style={style}
className={cx('ft-bar-item', {
Expand Down
12 changes: 12 additions & 0 deletions src/apps/toolbar/modules/main/ContextMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,18 @@ export function MainContextMenu() {
{
type: 'divider',
},
{
key: 'reoder',
icon: <Icon iconName={!items.isReorderDisabled ? 'VscLock' : 'VscUnlock' } />,
label: t(!items.isReorderDisabled ? 'context_menu.reorder_disable' : 'context_menu.reorder_enable' ),
onClick() {
dispatch(RootActions.setToolbarReorderDisabled(!items.isReorderDisabled));
SaveToolbarItems();
},
},
{
type: 'divider',
},
{
key: 'task_manager',
icon: <Icon iconName="PiChartLineFill" />,
Expand Down
4 changes: 4 additions & 0 deletions src/apps/toolbar/modules/main/infra.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@ export function ToolBar() {
}, [isOverlaped, hideMode]);

const onReorderPinned = useCallback((apps: (ToolbarItem | string)[]) => {
if (structure.isReorderDisabled) {
return;
}

let dividerStart = apps.indexOf(DividerStart);
let dividerEnd = apps.indexOf(DividerEnd);

Expand Down
6 changes: 6 additions & 0 deletions src/apps/toolbar/modules/shared/store/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,12 @@ export const RootSlice = createSlice({
state.items.right = state.items.right.filter(filter);
}
},
setToolbarReorderDisabled(state, action: PayloadAction<boolean>) {
let enabled = action.payload;
if (state.items) {
state.items.isReorderDisabled = enabled;
}
},
},
});

Expand Down
1 change: 1 addition & 0 deletions src/background/state/application/toolbar_items.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ use super::FullState;
impl FullState {
fn initial_toolbar_items() -> Placeholder {
Placeholder {
is_reorder_disabled: false,
left: vec![
ToolbarItem2::Plugin("@default/user-folder".into()),
ToolbarItem2::Inline(ToolbarItem::Text(TextToolbarItem {
Expand Down

0 comments on commit f1b892f

Please sign in to comment.