mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-05 23:18:53 -05:00
wtv
This commit is contained in:
parent
3c74badaec
commit
55c5b0be12
@ -1 +1 @@
|
||||
VERSION = "7.1.0"
|
||||
VERSION = "7.2.0"
|
||||
|
||||
@ -221,13 +221,12 @@ class MediaList(APIView):
|
||||
if publish_state and publish_state in ['private', 'public', 'unlisted']:
|
||||
media = media.filter(state=publish_state)
|
||||
|
||||
if show_param == "shared_with_me":
|
||||
media = media[:1000] # limit to 1000 results
|
||||
already_sorted = True
|
||||
|
||||
if not already_sorted:
|
||||
media = media.order_by(f"{ordering}{sort_by}")
|
||||
|
||||
if show_param == "shared_with_me":
|
||||
media = media[:1000] # limit to 1000 results
|
||||
|
||||
paginator = pagination_class()
|
||||
|
||||
page = paginator.paginate_queryset(media, request)
|
||||
|
||||
@ -414,10 +414,22 @@ class NavMenuInlineTabs extends React.PureComponent {
|
||||
) : null}
|
||||
{this.props.onToggleSortingClick && ['media', 'shared_by_me', 'shared_with_me'].includes(this.props.type) ? (
|
||||
<li className="media-sorting-toggle">
|
||||
<span style={{ display: 'flex', alignItems: 'center', cursor: 'pointer' }} onClick={this.props.onToggleSortingClick} title={translateString('Sort By')}>
|
||||
<span style={{ display: 'flex', alignItems: 'center', cursor: 'pointer', position: 'relative' }} onClick={this.props.onToggleSortingClick} title={translateString('Sort By')}>
|
||||
<CircleIconButton buttonShadow={false}>
|
||||
<i className="material-icons">swap_vert</i>
|
||||
</CircleIconButton>
|
||||
{this.props.hasActiveSort ? (
|
||||
<span style={{
|
||||
position: 'absolute',
|
||||
top: '8px',
|
||||
right: '8px',
|
||||
width: '8px',
|
||||
height: '8px',
|
||||
borderRadius: '50%',
|
||||
backgroundColor: 'var(--default-theme-color)',
|
||||
border: '2px solid white',
|
||||
}}></span>
|
||||
) : null}
|
||||
</span>
|
||||
</li>
|
||||
) : null}
|
||||
@ -438,6 +450,7 @@ NavMenuInlineTabs.propTypes = {
|
||||
onToggleSortingClick: PropTypes.func,
|
||||
hasActiveFilters: PropTypes.bool,
|
||||
hasActiveTags: PropTypes.bool,
|
||||
hasActiveSort: PropTypes.bool,
|
||||
};
|
||||
|
||||
function AddBannerButton(props) {
|
||||
@ -663,6 +676,7 @@ export default function ProfilePagesHeader(props) {
|
||||
onToggleSortingClick={props.onToggleSortingClick}
|
||||
hasActiveFilters={props.hasActiveFilters}
|
||||
hasActiveTags={props.hasActiveTags}
|
||||
hasActiveSort={props.hasActiveSort}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@ -678,6 +692,7 @@ ProfilePagesHeader.propTypes = {
|
||||
onToggleSortingClick: PropTypes.func,
|
||||
hasActiveFilters: PropTypes.bool,
|
||||
hasActiveTags: PropTypes.bool,
|
||||
hasActiveSort: PropTypes.bool,
|
||||
};
|
||||
|
||||
ProfilePagesHeader.defaultProps = {
|
||||
|
||||
@ -67,6 +67,9 @@ export function ProfileMediaFilters(props) {
|
||||
}
|
||||
|
||||
function onFilterSelect(ev) {
|
||||
const filterType = ev.currentTarget.getAttribute('filter');
|
||||
const clickedValue = ev.currentTarget.getAttribute('value');
|
||||
|
||||
const args = {
|
||||
media_type: mediaTypeFilter,
|
||||
upload_date: uploadDateFilter,
|
||||
@ -76,34 +79,35 @@ export function ProfileMediaFilters(props) {
|
||||
tag: props.selectedTag || tagFilter,
|
||||
};
|
||||
|
||||
switch (ev.currentTarget.getAttribute('filter')) {
|
||||
switch (filterType) {
|
||||
case 'media_type':
|
||||
args.media_type = ev.currentTarget.getAttribute('value');
|
||||
// If clicking the currently selected filter, deselect it (set to 'all')
|
||||
args.media_type = clickedValue === mediaTypeFilter ? 'all' : clickedValue;
|
||||
props.onFiltersUpdate(args);
|
||||
setFilter_media_type(args.media_type);
|
||||
break;
|
||||
case 'upload_date':
|
||||
args.upload_date = ev.currentTarget.getAttribute('value');
|
||||
args.upload_date = clickedValue === uploadDateFilter ? 'all' : clickedValue;
|
||||
props.onFiltersUpdate(args);
|
||||
setFilter_upload_date(args.upload_date);
|
||||
break;
|
||||
case 'duration':
|
||||
args.duration = ev.currentTarget.getAttribute('value');
|
||||
args.duration = clickedValue === durationFilter ? 'all' : clickedValue;
|
||||
props.onFiltersUpdate(args);
|
||||
setFilter_duration(args.duration);
|
||||
break;
|
||||
case 'publish_state':
|
||||
args.publish_state = ev.currentTarget.getAttribute('value');
|
||||
args.publish_state = clickedValue === publishStateFilter ? 'all' : clickedValue;
|
||||
props.onFiltersUpdate(args);
|
||||
setFilter_publish_state(args.publish_state);
|
||||
break;
|
||||
case 'sort_by':
|
||||
args.sort_by = ev.currentTarget.getAttribute('value');
|
||||
args.sort_by = clickedValue === sortByFilter ? 'date_added_desc' : clickedValue;
|
||||
props.onFiltersUpdate(args);
|
||||
setFilter_sort_by(args.sort_by);
|
||||
break;
|
||||
case 'tag':
|
||||
args.tag = ev.currentTarget.getAttribute('value');
|
||||
args.tag = clickedValue === tagFilter ? 'all' : clickedValue;
|
||||
props.onFiltersUpdate(args);
|
||||
setFilter_tag(args.tag);
|
||||
break;
|
||||
|
||||
@ -26,8 +26,10 @@ export function ProfileMediaTags(props) {
|
||||
|
||||
function onFilterSelect(ev) {
|
||||
const tag = ev.currentTarget.getAttribute('value');
|
||||
setFilter_tag(tag);
|
||||
props.onTagSelect(tag);
|
||||
// If clicking the currently selected tag, deselect it (set to 'all')
|
||||
const newTag = tag === tagFilter ? 'all' : tag;
|
||||
setFilter_tag(newTag);
|
||||
props.onTagSelect(newTag);
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
@ -605,7 +605,7 @@ export class ProfileMediaPage extends Page {
|
||||
}
|
||||
|
||||
onTagSelect(tag) {
|
||||
this.setState({ selectedTag: tag, hiddenTags: true }, () => {
|
||||
this.setState({ selectedTag: tag }, () => {
|
||||
// Apply tag filter
|
||||
this.onFiltersUpdate({
|
||||
media_type: this.state.filterArgs.includes('media_type') ? this.state.filterArgs.match(/media_type=([^&]*)/)?.[1] : null,
|
||||
@ -617,7 +617,7 @@ export class ProfileMediaPage extends Page {
|
||||
}
|
||||
|
||||
onSortSelect(sortOption) {
|
||||
this.setState({ selectedSort: sortOption, hiddenSorting: true }, () => {
|
||||
this.setState({ selectedSort: sortOption }, () => {
|
||||
// Apply sort filter
|
||||
this.onFiltersUpdate({
|
||||
media_type: this.state.filterArgs.includes('media_type') ? this.state.filterArgs.match(/media_type=([^&]*)/)?.[1] : null,
|
||||
@ -884,12 +884,15 @@ export class ProfileMediaPage extends Page {
|
||||
);
|
||||
|
||||
const hasActiveTags = this.state.selectedTag && this.state.selectedTag !== 'all';
|
||||
const hasActiveSort = this.state.selectedSort && this.state.selectedSort !== 'date_added_desc';
|
||||
|
||||
console.log('Filter Debug:', {
|
||||
filterArgs: this.state.filterArgs,
|
||||
selectedTag: this.state.selectedTag,
|
||||
selectedSort: this.state.selectedSort,
|
||||
hasActiveFilters,
|
||||
hasActiveTags
|
||||
hasActiveTags,
|
||||
hasActiveSort
|
||||
});
|
||||
|
||||
return [
|
||||
@ -904,6 +907,7 @@ export class ProfileMediaPage extends Page {
|
||||
onToggleSortingClick={this.onToggleSortingClick}
|
||||
hasActiveFilters={hasActiveFilters}
|
||||
hasActiveTags={hasActiveTags}
|
||||
hasActiveSort={hasActiveSort}
|
||||
/>
|
||||
) : null,
|
||||
this.state.author ? (
|
||||
|
||||
@ -151,17 +151,23 @@ export class ProfileSharedByMePage extends Page {
|
||||
onToggleFiltersClick() {
|
||||
this.setState({
|
||||
hiddenFilters: !this.state.hiddenFilters,
|
||||
hiddenTags: true,
|
||||
hiddenSorting: true,
|
||||
});
|
||||
}
|
||||
|
||||
onToggleTagsClick() {
|
||||
this.setState({
|
||||
hiddenFilters: true,
|
||||
hiddenTags: !this.state.hiddenTags,
|
||||
hiddenSorting: true,
|
||||
});
|
||||
}
|
||||
|
||||
onToggleSortingClick() {
|
||||
this.setState({
|
||||
hiddenFilters: true,
|
||||
hiddenTags: true,
|
||||
hiddenSorting: !this.state.hiddenSorting,
|
||||
});
|
||||
}
|
||||
@ -290,6 +296,12 @@ export class ProfileSharedByMePage extends Page {
|
||||
|
||||
const isMediaAuthor = authorData && authorData.username === MemberContext._currentValue.username;
|
||||
|
||||
// Check if any filters are active
|
||||
const hasActiveFilters = this.state.filterArgs && (
|
||||
this.state.filterArgs.includes('media_type=') ||
|
||||
this.state.filterArgs.includes('upload_date=')
|
||||
);
|
||||
|
||||
return [
|
||||
this.state.author ? (
|
||||
<ProfilePagesHeader
|
||||
@ -300,6 +312,9 @@ export class ProfileSharedByMePage extends Page {
|
||||
onToggleFiltersClick={this.onToggleFiltersClick}
|
||||
onToggleTagsClick={this.onToggleTagsClick}
|
||||
onToggleSortingClick={this.onToggleSortingClick}
|
||||
hasActiveFilters={hasActiveFilters}
|
||||
hasActiveTags={this.state.selectedTag !== 'all'}
|
||||
hasActiveSort={this.state.selectedSort !== 'date_added_desc'}
|
||||
/>
|
||||
) : null,
|
||||
this.state.author ? (
|
||||
|
||||
@ -151,17 +151,23 @@ export class ProfileSharedWithMePage extends Page {
|
||||
onToggleFiltersClick() {
|
||||
this.setState({
|
||||
hiddenFilters: !this.state.hiddenFilters,
|
||||
hiddenTags: true,
|
||||
hiddenSorting: true,
|
||||
});
|
||||
}
|
||||
|
||||
onToggleTagsClick() {
|
||||
this.setState({
|
||||
hiddenFilters: true,
|
||||
hiddenTags: !this.state.hiddenTags,
|
||||
hiddenSorting: true,
|
||||
});
|
||||
}
|
||||
|
||||
onToggleSortingClick() {
|
||||
this.setState({
|
||||
hiddenFilters: true,
|
||||
hiddenTags: true,
|
||||
hiddenSorting: !this.state.hiddenSorting,
|
||||
});
|
||||
}
|
||||
@ -290,6 +296,12 @@ export class ProfileSharedWithMePage extends Page {
|
||||
|
||||
const isMediaAuthor = authorData && authorData.username === MemberContext._currentValue.username;
|
||||
|
||||
// Check if any filters are active
|
||||
const hasActiveFilters = this.state.filterArgs && (
|
||||
this.state.filterArgs.includes('media_type=') ||
|
||||
this.state.filterArgs.includes('upload_date=')
|
||||
);
|
||||
|
||||
return [
|
||||
this.state.author ? (
|
||||
<ProfilePagesHeader
|
||||
@ -300,6 +312,9 @@ export class ProfileSharedWithMePage extends Page {
|
||||
onToggleFiltersClick={this.onToggleFiltersClick}
|
||||
onToggleTagsClick={this.onToggleTagsClick}
|
||||
onToggleSortingClick={this.onToggleSortingClick}
|
||||
hasActiveFilters={hasActiveFilters}
|
||||
hasActiveTags={this.state.selectedTag !== 'all'}
|
||||
hasActiveSort={this.state.selectedSort !== 'date_added_desc'}
|
||||
/>
|
||||
) : null,
|
||||
this.state.author ? (
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user