mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-15 02:33:22 +00:00
Remove ajax_select from core
This commit is contained in:
parent
e7181257e3
commit
8b419dcee6
@ -75,8 +75,8 @@ class SithFileController(ControllerBase):
|
|||||||
permissions=[CanAccessLookup],
|
permissions=[CanAccessLookup],
|
||||||
)
|
)
|
||||||
@paginate(PageNumberPaginationExtra, page_size=50)
|
@paginate(PageNumberPaginationExtra, page_size=50)
|
||||||
def search_files(self, query: Annotated[str, annotated_types.MinLen(1)]):
|
def search_files(self, search: Annotated[str, annotated_types.MinLen(1)]):
|
||||||
return SithFile.objects.filter(is_in_sas=False).filter(name__icontains=query)
|
return SithFile.objects.filter(is_in_sas=False).filter(name__icontains=search)
|
||||||
|
|
||||||
|
|
||||||
@api_controller("/group")
|
@api_controller("/group")
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from pathlib import Path
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
|
||||||
from annotated_types import MinLen
|
from annotated_types import MinLen
|
||||||
@ -50,6 +51,12 @@ class SithFileSchema(ModelSchema):
|
|||||||
model = SithFile
|
model = SithFile
|
||||||
fields = ["id", "name"]
|
fields = ["id", "name"]
|
||||||
|
|
||||||
|
path: str
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def resolve_path(obj: SithFile) -> str:
|
||||||
|
return str(Path(obj.get_parent_path()) / obj.name)
|
||||||
|
|
||||||
|
|
||||||
class GroupSchema(ModelSchema):
|
class GroupSchema(ModelSchema):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -4,8 +4,10 @@ import type { TomOption } from "tom-select/dist/types/types";
|
|||||||
import type { escape_html } from "tom-select/dist/types/utils";
|
import type { escape_html } from "tom-select/dist/types/utils";
|
||||||
import {
|
import {
|
||||||
type GroupSchema,
|
type GroupSchema,
|
||||||
|
type SithFileSchema,
|
||||||
type UserProfileSchema,
|
type UserProfileSchema,
|
||||||
groupSearchGroup,
|
groupSearchGroup,
|
||||||
|
sithfileSearchFiles,
|
||||||
userSearchUsers,
|
userSearchUsers,
|
||||||
} from "#openapi";
|
} from "#openapi";
|
||||||
|
|
||||||
@ -71,3 +73,28 @@ export class GroupsAjaxSelect extends AjaxSelect {
|
|||||||
return `<span>${sanitize(item.name)}</span>`;
|
return `<span>${sanitize(item.name)}</span>`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@registerComponent("sith-file-ajax-select")
|
||||||
|
export class SithFileAjaxSelect extends AjaxSelect {
|
||||||
|
protected valueField = "id";
|
||||||
|
protected labelField = "path";
|
||||||
|
protected searchField = ["path", "name"];
|
||||||
|
|
||||||
|
protected async search(query: string): Promise<TomOption[]> {
|
||||||
|
const resp = await sithfileSearchFiles({ query: { search: query } });
|
||||||
|
if (resp.data) {
|
||||||
|
return resp.data.results;
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected renderOption(item: SithFileSchema, sanitize: typeof escape_html) {
|
||||||
|
return `<div class="select-item">
|
||||||
|
<span class="select-item-text">${sanitize(item.path)}</span>
|
||||||
|
</div>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected renderItem(item: SithFileSchema, sanitize: typeof escape_html) {
|
||||||
|
return `<span>${sanitize(item.path)}</span>`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -18,7 +18,6 @@ from urllib.parse import quote, urljoin
|
|||||||
# This file contains all the views that concern the page model
|
# This file contains all the views that concern the page model
|
||||||
from wsgiref.util import FileWrapper
|
from wsgiref.util import FileWrapper
|
||||||
|
|
||||||
from ajax_select import make_ajax_field
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
@ -39,6 +38,11 @@ from core.views import (
|
|||||||
CanViewMixin,
|
CanViewMixin,
|
||||||
can_view,
|
can_view,
|
||||||
)
|
)
|
||||||
|
from core.views.widgets.select import (
|
||||||
|
AutoCompleteSelectMultipleGroup,
|
||||||
|
AutoCompleteSelectSithFile,
|
||||||
|
AutoCompleteSelectUser,
|
||||||
|
)
|
||||||
from counter.utils import is_logged_in_counter
|
from counter.utils import is_logged_in_counter
|
||||||
|
|
||||||
|
|
||||||
@ -217,14 +221,13 @@ class FileEditPropForm(forms.ModelForm):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = SithFile
|
model = SithFile
|
||||||
fields = ["parent", "owner", "edit_groups", "view_groups"]
|
fields = ["parent", "owner", "edit_groups", "view_groups"]
|
||||||
|
widgets = {
|
||||||
|
"parent": AutoCompleteSelectSithFile,
|
||||||
|
"owner": AutoCompleteSelectUser,
|
||||||
|
"edit_groups": AutoCompleteSelectMultipleGroup,
|
||||||
|
"view_groups": AutoCompleteSelectMultipleGroup,
|
||||||
|
}
|
||||||
|
|
||||||
parent = make_ajax_field(SithFile, "parent", "files", help_text="")
|
|
||||||
edit_groups = make_ajax_field(
|
|
||||||
SithFile, "edit_groups", "groups", help_text="", label=_("edit group")
|
|
||||||
)
|
|
||||||
view_groups = make_ajax_field(
|
|
||||||
SithFile, "view_groups", "groups", help_text="", label=_("view group")
|
|
||||||
)
|
|
||||||
recursive = forms.BooleanField(label=_("Apply rights recursively"), required=False)
|
recursive = forms.BooleanField(label=_("Apply rights recursively"), required=False)
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ from django.db.models import Model
|
|||||||
from django.forms import Select, SelectMultiple
|
from django.forms import Select, SelectMultiple
|
||||||
from ninja import ModelSchema
|
from ninja import ModelSchema
|
||||||
|
|
||||||
from core.models import Group, User
|
from core.models import Group, SithFile, User
|
||||||
from core.schemas import GroupSchema, UserProfileSchema
|
from core.schemas import GroupSchema, SithFileSchema, UserProfileSchema
|
||||||
|
|
||||||
|
|
||||||
class AutoCompleteSelectMixin:
|
class AutoCompleteSelectMixin:
|
||||||
@ -91,3 +91,15 @@ class AutoCompleteSelectMultipleGroup(AutoCompleteSelectMixin, SelectMultiple):
|
|||||||
component_name = "group-ajax-select"
|
component_name = "group-ajax-select"
|
||||||
model = Group
|
model = Group
|
||||||
schema = GroupSchema
|
schema = GroupSchema
|
||||||
|
|
||||||
|
|
||||||
|
class AutoCompleteSelectSithFile(AutoCompleteSelectMixin, Select):
|
||||||
|
component_name = "sith-file-ajax-select"
|
||||||
|
model = SithFile
|
||||||
|
schema = SithFileSchema
|
||||||
|
|
||||||
|
|
||||||
|
class AutoCompleteSelectMultipleSithFile(AutoCompleteSelectMixin, SelectMultiple):
|
||||||
|
component_name = "sith-file-ajax-select"
|
||||||
|
model = SithFile
|
||||||
|
schema = SithFileSchema
|
||||||
|
Loading…
Reference in New Issue
Block a user