Change search to POST and add sequence numbers
This commit is contained in:
parent
4e78087338
commit
8c1f1ab3de
|
@ -24,9 +24,12 @@ class UserSerializer(serializers.ModelSerializer):
|
|||
|
||||
# member viewing member list or other member
|
||||
class OtherMemberSerializer(serializers.ModelSerializer):
|
||||
q = serializers.CharField(write_only=True, max_length=64)
|
||||
seq = serializers.IntegerField(write_only=True, )
|
||||
|
||||
class Meta:
|
||||
model = models.Member
|
||||
fields = ['preferred_name', 'last_name', 'status', 'current_start_date']
|
||||
fields = ['q', 'seq', 'preferred_name', 'last_name', 'status', 'current_start_date']
|
||||
|
||||
# member viewing himself
|
||||
class MemberSerializer(serializers.ModelSerializer):
|
||||
|
|
|
@ -13,10 +13,6 @@ class AllowMetadata(permissions.BasePermission):
|
|||
return request.method in ['OPTIONS', 'HEAD']
|
||||
|
||||
|
||||
class UserViewSet(viewsets.ModelViewSet):
|
||||
queryset = User.objects.all().order_by('-date_joined')
|
||||
serializer_class = serializers.UserSerializer
|
||||
|
||||
|
||||
search_strings = {}
|
||||
def gen_search_strings():
|
||||
|
@ -33,17 +29,17 @@ def gen_search_strings():
|
|||
print('Generated search strings in {} s'.format(time.time() - start))
|
||||
gen_search_strings()
|
||||
|
||||
class SearchViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
class SearchViewSet(viewsets.ViewSet):
|
||||
permission_classes = [AllowMetadata | permissions.IsAuthenticated]
|
||||
serializer_class = serializers.OtherMemberSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
NUM_SEARCH_RESULTS = 10
|
||||
|
||||
queryset = models.Member.objects.all()
|
||||
params = self.request.query_params
|
||||
search = self.request.data.get('q', '').lower()
|
||||
|
||||
if 'q' in params and len(params['q']):
|
||||
search = params['q'].lower()
|
||||
if len(search):
|
||||
choices = search_strings.keys()
|
||||
|
||||
# get exact starts with matches
|
||||
|
@ -68,9 +64,10 @@ class SearchViewSet(viewsets.ReadOnlyModelViewSet):
|
|||
|
||||
return queryset
|
||||
|
||||
def list(self, request):
|
||||
# must POST so query string doesn't change so preflight request is cached
|
||||
def create(self, request):
|
||||
try:
|
||||
seq = int(request.query_params.get('seq', 0))
|
||||
seq = int(request.data.get('seq', 0))
|
||||
except ValueError:
|
||||
seq = 0
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ from rest_framework import routers
|
|||
from .api import views
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register(r'users', views.UserViewSet)
|
||||
#router.register(r'users', views.UserViewSet)
|
||||
router.register(r'members', views.MemberViewSet, basename='member')
|
||||
router.register(r'courses', views.CourseViewSet, basename='course')
|
||||
router.register(r'sessions', views.SessionViewSet, basename='session')
|
||||
|
|
|
@ -150,7 +150,7 @@ function MemberInfo(props) {
|
|||
</Table.Row>
|
||||
)
|
||||
:
|
||||
<p>None</p>
|
||||
<Table.Row><Table.Cell>None</Table.Cell></Table.Row>
|
||||
}
|
||||
</Table.Body>
|
||||
</Table>
|
||||
|
|
|
@ -8,11 +8,11 @@ import { NotFound, PleaseLogin } from './Misc.js';
|
|||
|
||||
export function Members(props) {
|
||||
const [members, setMembers] = useState(false);
|
||||
const [search, setSearch] = useState({t: 0, v: ''});
|
||||
const [search, setSearch] = useState({seq: 0, q: ''});
|
||||
const { token } = props;
|
||||
|
||||
useEffect(() => {
|
||||
requester('/search/?seq='+search.t+'&q='+search.v, 'GET', '')
|
||||
requester('/search/', 'POST', token, search)
|
||||
.then(res => {
|
||||
if (!members || res.seq > members.seq) {
|
||||
setMembers(res);
|
||||
|
@ -30,12 +30,12 @@ export function Members(props) {
|
|||
<Input autoFocus focus icon='search'
|
||||
placeholder='Search...'
|
||||
value={search.v}
|
||||
onChange={(e, v) => setSearch({t: e.timeStamp, v: v.value})}
|
||||
onChange={(e, v) => setSearch({seq: e.timeStamp, q: v.value})}
|
||||
aria-label='search products'
|
||||
/>
|
||||
|
||||
<Header size='medium'>
|
||||
{search.length ? 'Search Results' : 'Recently Vetted'}
|
||||
{search.q.length ? 'Search Results' : 'Recently Vetted'}
|
||||
</Header>
|
||||
|
||||
{members ?
|
||||
|
@ -58,7 +58,7 @@ export function Members(props) {
|
|||
</Table.Row>
|
||||
)
|
||||
:
|
||||
<p>No Results</p>
|
||||
<Table.Row><Table.Cell>No Results</Table.Cell></Table.Row>
|
||||
}
|
||||
</Table.Body>
|
||||
</Table>
|
||||
|
|
|
@ -36,7 +36,7 @@ export function Transactions(props) {
|
|||
</Table.Row>
|
||||
)
|
||||
:
|
||||
<p>None</p>
|
||||
<Table.Row><Table.Cell>None</Table.Cell></Table.Row>
|
||||
}
|
||||
</Table.Body>
|
||||
</Table>
|
||||
|
|
Loading…
Reference in New Issue
Block a user