Skip to content
Draft
Show file tree
Hide file tree
Changes from 9 commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,7 @@ grCollectionsPanel.controller('GrNodeCtrl',
grCollectionTreeCtrl.onSelect({$collection: ctrl.node.data.data.path});
};

ctrl.srefNonfree = () => storage.getJs("isNonFree", true) ? true : undefined;

ctrl.srefNonfree = () => storage.getJs("isNonFree", true) === 'true' ? 'true' : 'false';

};
ctrl.searchWithModifiers = searchWithModifiers;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -413,7 +413,7 @@ module.controller('grImageMetadataCtrl', [
return storage.getJs(generateStoreName(key)).hidden;
};

ctrl.srefNonfree = () => storage.getJs("isNonFree", true) ? true : undefined;
ctrl.srefNonfree = () => storage.getJs("isNonFree", true) === 'true' ? 'true' : 'false';

function isUsefulMetadata(metadataKey) {
return ignoredMetadata.indexOf(metadataKey) === -1;
Expand Down
17 changes: 9 additions & 8 deletions kahuna/public/js/components/gr-my-uploads/gr-my-uploads.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@ export interface MyUploadsWrapperProps {
props: MyUploadsProps;
}

//-- logo click event --
interface LogoClickEventDetail { showPaid: boolean }
interface LogoClickEvent extends CustomEvent<LogoClickEventDetail> {optional?: string}

//-- filter change event --
interface Filter { uploadedByMe: boolean }
interface FilterChangeEventDetail { filter: Filter }
Expand All @@ -38,6 +34,10 @@ const MyUploads: React.FC<MyUploadsWrapperProps> = ({ props }) => {

const [myUploads, setMyUploads] = useState(props.myUploads);

useEffect(() => {
setMyUploads(prev => prev === props.myUploads ? prev : props.myUploads);
}, [props.myUploads]);

const handleCheckboxClick = () => {
setMyUploads(prevChkd => {
props.onChange(!prevChkd);
Expand All @@ -61,17 +61,18 @@ const MyUploads: React.FC<MyUploadsWrapperProps> = ({ props }) => {
}
};

const handleLogoClick = (event: LogoClickEvent) => {
setMyUploads(false);
const handleLogoClick = () => {
setMyUploads(prev => prev ? false : prev);
};

const handleFilterChange = (event: FilterChangeEvent) => {
setMyUploads(event.detail.filter.uploadedByMe);
const next = event.detail.filter.uploadedByMe;
setMyUploads(prev => prev === next ? prev : next);
};

const handleUploadedBy = (event: UploadedByEvent) => {
const matches: boolean = (event.detail.userEmail === event.detail.uploadedBy);
setMyUploads(matches);
setMyUploads(prev => prev === matches ? prev : matches);
};

useEffect(() => {
Expand Down
2 changes: 1 addition & 1 deletion kahuna/public/js/components/gr-photoshoot/gr-photoshoot.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ photoshoot.controller('GrPhotoshootCtrl', [
return photoshootService.batchRemove({ images: ctrl.images });
};

ctrl.srefNonfree = () => storage.getJs("isNonFree", true) ? true : undefined;
ctrl.srefNonfree = () => storage.getJs("isNonFree", true) === 'true' ? 'true' : 'false';

if (Boolean(ctrl.withBatch)) {
const batchApplyEvent = 'events:batch-apply:photoshoot';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ presetLabels.controller('GrPresetLabelsCtrl', [
ctrl.newLabel = '';
}

ctrl.srefNonfree = () => storage.getJs("isNonFree", true) ? true : undefined;
ctrl.srefNonfree = () => storage.getJs("isNonFree", true) === 'true' ? 'true' : 'false';

}
]);
Expand Down
12 changes: 12 additions & 0 deletions kahuna/public/js/components/gr-sort-control/base-sort-control.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import "./gr-sort-control.css";

const SELECT_OPTION = "Select an option";
const DEFAULT_OPTION = DefaultSortOption.value;

Check warning on line 8 in kahuna/public/js/components/gr-sort-control/base-sort-control.tsx

View workflow job for this annotation

GitHub Actions / CI

'DEFAULT_OPTION' is assigned a value but never used
const COLLECTION_OPTION = CollectionSortOption.value;
const CONTROL_TITLE = "Sort by:";
const SORT_ORDER = "Sort order";
Expand Down Expand Up @@ -82,6 +82,18 @@
const [currentIndex, setCurrentIndex] = useState(-1);
const [isPanelVisible, setPanelVisible] = useState(panelVisible);

useEffect(() => {
const nextSort = startSelectedOption ? startSelectedOption : DefaultSortOption;
setSelection(nextSort);
if (!nextSort.isCollection) {
setPrevious(nextSort);
}
}, [startSelectedOption]);

useEffect(() => {
setPanelVisible(panelVisible);
}, [panelVisible]);

const handleArrowKeys = (event:KeyboardEvent<HTMLDivElement>) => {
if (event.key === 'ArrowDown' ||
event.key === 'ArrowUp' ||
Expand Down Expand Up @@ -114,7 +126,7 @@

// initialisation
useEffect(() => {
const autoHideListener = (event: any) => {

Check warning on line 129 in kahuna/public/js/components/gr-sort-control/base-sort-control.tsx

View workflow job for this annotation

GitHub Actions / CI

Unexpected any. Specify a different type
if (event.type === "keydown" && event.key === "Escape") {
setIsOpen(false);
} else if (event.type !== "keydown") {
Expand All @@ -124,7 +136,7 @@
}
};

const handlePanelShow = (event: any) => {

Check warning on line 139 in kahuna/public/js/components/gr-sort-control/base-sort-control.tsx

View workflow job for this annotation

GitHub Actions / CI

Unexpected any. Specify a different type
const panel = event.detail.panel;
if (panel === PANEL_IDENTIFIER) {
setPanelVisible(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,25 +24,44 @@ export interface ExtendedSortWrapperProps {

const checkForCollection = (query:string): boolean => /~"[a-zA-Z0-9 #-_.://]+"/.test(query);

const deriveExtendedSortState = (
query: string,
orderBy: string,
sortOptions: SortDropdownOption[],
noTakenDateClause: string
) => {
let selectedSort = DefaultSortOption;
if (!query.includes(noTakenDateClause)) {
selectedSort = sortOptions.find(o => o.value === orderBy) || DefaultSortOption;
}
return {
selectedSort,
hasCollection: checkForCollection(query)
};
};

const ExtendedSortControl: React.FC<ExtendedSortWrapperProps> = ({ props }) => {

const noTakenDateClause = "-has:dateTaken";
const takenDateClause = "has:dateTaken";
const sortOptions = SortOptions;
const orderBy = props.orderBy;
const query = props.query;

let startSortOption = DefaultSortOption;
if (!query.includes(noTakenDateClause) && (sortOptions.filter(o => o.value === orderBy)).length > 0) {
startSortOption = sortOptions.find(o => o.value === orderBy);
}

const startHasCollection = checkForCollection(query);
const orderBy = props.orderBy || "";
const query = props.query || "";
const { selectedSort: startSortOption, hasCollection: startHasCollection } =
deriveExtendedSortState(query, orderBy, sortOptions, noTakenDateClause);
const [selSortOption, setSortOption] = useState<SortDropdownOption>(startSortOption);
const [userTakenSelect, setUserTakenSelect] = useState<boolean>(props.userTakenSelect);
const noTakenDateCount = props.noTakenDateCount;
const [hasCollection, setHasCollection] = useState<boolean>(startHasCollection);

useEffect(() => {
const { selectedSort, hasCollection: nextHasCollection } =
deriveExtendedSortState(query, orderBy, sortOptions, noTakenDateClause);
setSortOption(selectedSort);
setHasCollection(nextHasCollection);
setUserTakenSelect(Boolean(props.userTakenSelect));
}, [query, orderBy, props.userTakenSelect]);

const onSortSelect = (selOption: SortDropdownOption) => {
setSortOption(selOption);
setUserTakenSelect(selOption.isTaken);
Expand Down
46 changes: 23 additions & 23 deletions kahuna/public/js/components/gr-sort-control/gr-sort-control.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,39 +18,41 @@ export interface SortWrapperProps {

const checkForCollection = (query:string): boolean => /~"[a-zA-Z0-9 #-_.://]+"/.test(query);

const deriveSortState = (query: string, orderBy: string, sortOptions: SortDropdownOption[]) => {
const hasCollection = checkForCollection(query);
if (hasCollection) {
const collectionSort = sortOptions.find(o => o.isCollection) || DefaultSortOption;
return { hasCollection, selectedSort: collectionSort };
}

const selectedSort = sortOptions.find(o => o.value === orderBy) || DefaultSortOption;
return { hasCollection, selectedSort };
};

const SortControl: React.FC<SortWrapperProps> = ({ props }) => {

const sortOptions = SortOptions;
const orderBy = props.orderBy;
const query = props.query;
const startHasCollection = checkForCollection(query);

let startSortOption = DefaultSortOption;
if (startHasCollection) {
if ((sortOptions.filter(o => o.isCollection)).length > 0) {
startSortOption = sortOptions.find(o => o.isCollection);
}
} else {
if ((sortOptions.filter(o => o.value === orderBy)).length > 0) {
startSortOption = sortOptions.find(o => o.value === orderBy);
}
}
const orderBy = props.orderBy || "";
const query = props.query || "";
const { hasCollection: startHasCollection, selectedSort: startSortOption } =
deriveSortState(query, orderBy, sortOptions);

const [selSortOption, setSortOption] = useState<SortDropdownOption>(startSortOption);
const [hasCollection, setHasCollection] = useState<boolean>(startHasCollection);

useEffect(() => {
const { hasCollection: nextHasCollection, selectedSort } = deriveSortState(query, orderBy, sortOptions);
setHasCollection(nextHasCollection);
setSortOption(selectedSort);
}, [query, orderBy]);

const onSortSelect = (selOption: SortDropdownOption) => {
setSortOption(selOption);
props.onSortSelect(selOption);
};

// initialisation
useEffect(() => {
const handleLogoClick = (e: any) => {
setSortOption(DefaultSortOption);
props.onSortSelect(DefaultSortOption);
};

// initialisation
useEffect(() => {
const handleQueryChange = (e: any) => {
const newQuery = e.detail.query ? (" " + e.detail.query) : "";
const curHasCollec = e.detail.hasCollection ? e.detail.hasCollection : false;
Expand All @@ -70,12 +72,10 @@ const SortControl: React.FC<SortWrapperProps> = ({ props }) => {
}
};

window.addEventListener("logoClick", handleLogoClick);
window.addEventListener("queryChangeEvent", handleQueryChange);

// Clean up the event listener when the component unmounts
return () => {
window.removeEventListener("logoClick", handleLogoClick);
window.removeEventListener("queryChangeEvent", handleQueryChange);
};

Expand Down
2 changes: 1 addition & 1 deletion kahuna/public/js/edits/image-editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ imageEditor.controller('ImageEditorCtrl', [
);
}

ctrl.srefNonfree = () => storage.getJs("isNonFree", true) ? true : undefined;
ctrl.srefNonfree = () => storage.getJs("isNonFree", true) === 'true' ? 'true' : 'false';
};
}]);

Expand Down
2 changes: 1 addition & 1 deletion kahuna/public/js/edits/list-editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ listEditor.controller('ListEditorCtrl', [
}
};

ctrl.srefNonfree = () => storage.getJs("isNonFree", true) ? true : undefined;
ctrl.srefNonfree = () => storage.getJs("isNonFree", true) === 'true' ? 'true' : 'false';

const batchAddEvent = 'events:batch-apply:add-all';
const batchRemoveEvent = 'events:batch-apply:remove-all';
Expand Down
6 changes: 5 additions & 1 deletion kahuna/public/js/preview/image.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ image.controller('uiPreviewImageCtrl', [

ctrl.showSendToPhotoSales = () => $window._clientConfig.showSendToPhotoSales;
ctrl.uploadedByCapture = ctrl.image.data.uploadedBy === "Capture_AutoIngest";
ctrl.sentToPhotosalesPublished = () => {
const isPublished = ctrl.image.data.metadata.domainMetadata?.archives?.isPublished ?? "True";
return isPublished === "True";
};
mediaApi.getSession().then(session => {
ctrl.showPaid = session.user.permissions.showPaid ? session.user.permissions.showPaid : undefined;
});
Expand Down Expand Up @@ -126,7 +130,7 @@ image.controller('uiPreviewImageCtrl', [
return collection.data.cssColour && `background-color: ${collection.data.cssColour}`;
};

ctrl.srefNonfree = () => storage.getJs("isNonFree", true) ? true : undefined;
ctrl.srefNonfree = () => storage.getJs("isNonFree", true) === 'true' ? 'true' : 'false';
ctrl.orderTakenBy = () => {
let orderBy = storage.getJs('orderBy', false);
return (orderBy && orderBy.includes('taken'));
Expand Down
6 changes: 4 additions & 2 deletions kahuna/public/js/search/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ import collectionsPanelTemplate from
import {cropUtil} from '../util/crop';
import { COLLECTION_SORT_VALUE } from '../components/gr-sort-control/gr-sort-control-config';

const toNonFreeString = (val) => (val === true || val === 'true') ? 'true' : 'false';

export var search = angular.module('kahuna.search', [
'ct.ui.router.extras.dsr',
'kahuna.search.query',
Expand Down Expand Up @@ -114,7 +116,7 @@ search.config(['$stateProvider', '$urlMatcherFactoryProvider',
isNonFree: showPaid ? showPaid : false
};
storage.setJs("defaultNonFreeFilter", defaultNonFreeFilter, true);
$state.go('search.results', {nonFree: defaultNonFreeFilter.isNonFree});
$state.go('search.results', {nonFree: toNonFreeString(defaultNonFreeFilter.isNonFree)});
window.dispatchEvent(new CustomEvent("logoClick", {
detail: {showPaid: defaultNonFreeFilter.isNonFree},
bubbles: true
Expand All @@ -125,7 +127,7 @@ search.config(['$stateProvider', '$urlMatcherFactoryProvider',

if ($state.current.name === 'search') {
mediaApi.getSession().then(session => {
storage.setJs('isNonFree', session.user.permissions.showPaid, true);
storage.setJs('isNonFree', toNonFreeString(session.user.permissions.showPaid), true);
});
}

Expand Down
3 changes: 2 additions & 1 deletion kahuna/public/js/search/query-filter.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ queryFilters.factory('searchWithModifiers',
const shift = $event.getModifierState('Shift');
if (alt || shift) {
$event.preventDefault();
const nonFree = storage.getJs("isNonFree", true) ? true : undefined;
const storedNonFree = storage.getJs("isNonFree", true);
const nonFree = storedNonFree === 'true' ? 'true' : 'false';

return $state.go('search.results', {
query: updateQueryWithModifiers(fieldName, fieldValue, alt, shift, $stateParams.query),
Expand Down
Loading
Loading