') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Update ‘page_size’ query param when it is updated on the the Administration User/Channel tables by jonboiser · Pull Request #2617 · learningequality/studio · GitHub
Skip to content

Update ‘page_size’ query param when it is updated on the the Administration User/Channel tables - #2617

Merged
jonboiser merged 4 commits into
learningequality:developfrom
jonboiser:admin-pagination
Dec 8, 2020
Merged

Update ‘page_size’ query param when it is updated on the the Administration User/Channel tables#2617
jonboiser merged 4 commits into
learningequality:developfrom
jonboiser:admin-pagination

Conversation

@jonboiser

Copy link
Copy Markdown
Contributor

Please remove any unused sections

Description

  1. Adds a missing line in administration/mixins.js to update the page_size query param when the two-way binded pagination object and it's rowsPerPage field change.
  2. Removes rowsPerPage, and totalItems from being added to the URL query paramas, since they are not necessary
  3. Removes sortBy and descending query params from URL when they are null

Issue Addressed (if applicable)

Fixes#2362

@jonboiserjonboiser added this to the Vue Refactor milestone Dec 2, 2020
@micahscopes

Copy link
Copy Markdown
Contributor

Awesome! I'll take a look.

@jredrejo

Copy link
Copy Markdown
Contributor

Oh man, this would have saved me some headaches in #2607
what about the ordering param that appears sometimes together or instead of sortBy? Did you do something with it too?

@jonboiserjonboiser reopened this Dec 3, 2020
@jonboiser

Copy link
Copy Markdown
ContributorAuthor

@jredrejo When I was testing this, I found that the ordering query param was being added to the URL as a side-effect of sorting the table, but I don't think that is what the table itself is using to determine the sort column. So in this line, I remove it from the URL (but make note that it is tech debt that ordering is coming from somewhere. I just don't know where yet)

https://github.com/learningequality/studio/pull/2617/files#diff-926677bcff46eabb0a5543ccea0ea00a97dca6501133b6e69806a87e2a3b15beR148

@jredrejojredrejo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code looks fine, tested it with the latest changes in the backend for this page in develop and everything seems to work fine.
I still would like to make that ordering parameter that's duplicating the sortBy parameter but that's not an essential part for this PR.

@jonboiser One last question, by curiosity: are lodash pickBy and omit functions faster than a normal Array.filter, or is it just the code looks more readable from your pov?

@jonboiser

Copy link
Copy Markdown
ContributorAuthor

@jredrejo I'll add the ordering query param back. I removed it just for aesthetics, but if it might be useful to you later on, I don't see any harm in it being there.

One last question, by curiosity: are lodash pickBy and omit functions faster than a normal Array.filter

pickBy and omit can be applied to objects as well as arrays. Often I use it to do remove object keys with falsy values like this:

pickBy({
a: 1,
b: null,
c: undefined
}) === { a: 1 }

I'm not sure if anything this succinct exists for Objects yet.

@jonboiser
jonboiser merged commit 917b148 into learningequality:developDec 8, 2020
@jonboiser
jonboiser deleted the admin-pagination branch December 8, 2020 18:23
@jredrejo

Copy link
Copy Markdown
Contributor

@jredrejo I'll add the ordering query param back. I removed it just for aesthetics, but if it might be useful to you later on, I don't see any harm in it being there.

No, no, just the opposite: I want it to disappear forever!!. It is making the backend code more complex for two reasons:

  1. Dealing with two parameters with the same purpose sortBy and ordered
  2. Ordered sometimes is "null", others "undefined" without apparent reason 😢

@marcellamakimarcellamaki mentioned this pull request Dec 9, 2020
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Page size isn't getting set in the admin panel user/channel tables

3 participants

@jonboiser@micahscopes@jredrejo