Admin page updates - #1977

Merged
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin
Jul 2, 2020
Merged

Admin page updates#1977
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 30, 2020

Copy link
Copy Markdown
Contributor

Description

Admin channel page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (more generalizable mixin generator)
  • Hooked up channel details/sharing modal options
  • Added channel size query
  • Updated to use new viewset backend
  • Added demo and source url fields

Admin user page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (used shared mixin)
  • Added user details modal
  • Added storage logic
  • Updated to use new viewset backend
  • Hooked up action logic
  • Added policies table
  • Added email workflow

Issues fixed

Implementation Notes (optional)

Includes changes from #1962 to avoid merge conflicts if possible

Does this introduce any tech-debt items?

Things to fix in channel CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Allow public/private switching (want to make this only available for admin users)
  • Restore (need to allow syncing on deleted channels)
  • Delete permanently (need to delete from database)
  • Channel sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Things to fix in user CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Fix activation/deactivation (admins only)
  • Set storage (admins only)
  • Revoke admin access (admins only)
  • Delete permanently (need to delete from database)
  • User sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are views organized into pages, components, and layouts directories as described in the docs?
  • Are there any new ways this uses user data that needs to be factored into our Privacy Policy?
  • Are there any new interactions that need to be added to the QA Sheet?

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Going to work on adding frontend tests soon

@jayoshihjayoshih changed the title Channel admin page updatesAdmin page updatesJul 2, 2020
@jayoshihjayoshih removed the WIP label Jul 2, 2020
@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Will open followup PR with tests

@codecov

codecovBot commented Jul 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1977 into develop will increase coverage by 0.26%.
The diff coverage is 71.28%.

Impacted file tree graph

@@ Coverage Diff @@## develop #1977 +/- ##
===========================================
+ Coverage 79.11% 79.38% +0.26% 
===========================================
Files 277 274 -3 Lines 13539 13134 -405 ===========================================
- Hits 10712 10427 -285 + Misses 2827 2707 -120 
Impacted FilesCoverage Δ
contentcuration/contentcuration/tasks.py72.64% <ø> (+0.87%)⬆️
contentcuration/contentcuration/views/admin.py69.38% <42.85%> (+1.75%)⬆️
...ontentcuration/contentcuration/viewsets/channel.py79.06% <67.56%> (-2.40%)⬇️
contentcuration/contentcuration/viewsets/user.py60.12% <74.00%> (+6.14%)⬆️
contentcuration/contentcuration/urls.py92.02% <100.00%> (+0.23%)⬆️
contentcuration/contentcuration/viewsets/common.py93.93% <100.00%> (+0.28%)⬆️
contentcuration/contentcuration/utils/format.py57.89% <0.00%> (-15.79%)⬇️
contentcuration/contentcuration/statistics.py31.45% <0.00%> (-5.65%)⬇️
contentcuration/contentcuration/serializers.py67.05% <0.00%> (-2.00%)⬇️
...ation/contentcuration/management/commands/setup.py

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b8b14f...ed63dab. Read the comment docs.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nothing blocking here!

fileSizeInTerabytes: '{n, number, integer} TB',
});

const ONE_B = 1;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Was about to comment on the constants.js above:

Maybe we should import these constants into mixins.js?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yep! I moved it to constants so that I can use it under other components (in this case UserStorage)

PRIVACY: 'privacy_policy',
};
export const policyDates = {
[policies.PRIVACY]: new Date(2018, 4, 25),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we have this date stored anywhere else? Is this just based on a git commit?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

We've mostly been hardcoding it in to keep track of the dates each new version was published

<template #header>
<span class="notranslate">{{ channel.name }}</span>
</template>
<template v-if="adminMode" #tabs>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think eventually it might make sense to break out the 'info' tab into a component and just have an admin specific modal that uses the info component and the sharing component - just the 'adminMode' gave me a lilttle pause, as adding additional mode props to components is often a sign we are trying to make one component do too much work!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Now that you mention it, I might be able to just use the Details component for its own modal

@rtibbles
rtibbles merged commit c76fc84 into learningequality:developJul 2, 2020
@jayoshihjayoshih mentioned this pull request Jul 7, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants

@jayoshih@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Admin page updates - #1977

Merged
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin
Jul 2, 2020
Merged

Admin page updates#1977
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 30, 2020

Copy link
Copy Markdown
Contributor

Description

Admin channel page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (more generalizable mixin generator)
  • Hooked up channel details/sharing modal options
  • Added channel size query
  • Updated to use new viewset backend
  • Added demo and source url fields

Admin user page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (used shared mixin)
  • Added user details modal
  • Added storage logic
  • Updated to use new viewset backend
  • Hooked up action logic
  • Added policies table
  • Added email workflow

Issues fixed

Implementation Notes (optional)

Includes changes from #1962 to avoid merge conflicts if possible

Does this introduce any tech-debt items?

Things to fix in channel CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Allow public/private switching (want to make this only available for admin users)
  • Restore (need to allow syncing on deleted channels)
  • Delete permanently (need to delete from database)
  • Channel sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Things to fix in user CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Fix activation/deactivation (admins only)
  • Set storage (admins only)
  • Revoke admin access (admins only)
  • Delete permanently (need to delete from database)
  • User sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are views organized into pages, components, and layouts directories as described in the docs?
  • Are there any new ways this uses user data that needs to be factored into our Privacy Policy?
  • Are there any new interactions that need to be added to the QA Sheet?

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Going to work on adding frontend tests soon

@jayoshihjayoshih changed the title Channel admin page updatesAdmin page updatesJul 2, 2020
@jayoshihjayoshih removed the WIP label Jul 2, 2020
@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Will open followup PR with tests

@codecov

codecovBot commented Jul 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1977 into develop will increase coverage by 0.26%.
The diff coverage is 71.28%.

Impacted file tree graph

@@ Coverage Diff @@## develop #1977 +/- ##
===========================================
+ Coverage 79.11% 79.38% +0.26% 
===========================================
Files 277 274 -3 Lines 13539 13134 -405 ===========================================
- Hits 10712 10427 -285 + Misses 2827 2707 -120 
Impacted FilesCoverage Δ
contentcuration/contentcuration/tasks.py72.64% <ø> (+0.87%)⬆️
contentcuration/contentcuration/views/admin.py69.38% <42.85%> (+1.75%)⬆️
...ontentcuration/contentcuration/viewsets/channel.py79.06% <67.56%> (-2.40%)⬇️
contentcuration/contentcuration/viewsets/user.py60.12% <74.00%> (+6.14%)⬆️
contentcuration/contentcuration/urls.py92.02% <100.00%> (+0.23%)⬆️
contentcuration/contentcuration/viewsets/common.py93.93% <100.00%> (+0.28%)⬆️
contentcuration/contentcuration/utils/format.py57.89% <0.00%> (-15.79%)⬇️
contentcuration/contentcuration/statistics.py31.45% <0.00%> (-5.65%)⬇️
contentcuration/contentcuration/serializers.py67.05% <0.00%> (-2.00%)⬇️
...ation/contentcuration/management/commands/setup.py

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b8b14f...ed63dab. Read the comment docs.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nothing blocking here!

fileSizeInTerabytes: '{n, number, integer} TB',
});

const ONE_B = 1;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Was about to comment on the constants.js above:

Maybe we should import these constants into mixins.js?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yep! I moved it to constants so that I can use it under other components (in this case UserStorage)

PRIVACY: 'privacy_policy',
};
export const policyDates = {
[policies.PRIVACY]: new Date(2018, 4, 25),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we have this date stored anywhere else? Is this just based on a git commit?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

We've mostly been hardcoding it in to keep track of the dates each new version was published

<template #header>
<span class="notranslate">{{ channel.name }}</span>
</template>
<template v-if="adminMode" #tabs>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think eventually it might make sense to break out the 'info' tab into a component and just have an admin specific modal that uses the info component and the sharing component - just the 'adminMode' gave me a lilttle pause, as adding additional mode props to components is often a sign we are trying to make one component do too much work!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Now that you mention it, I might be able to just use the Details component for its own modal

@rtibbles
rtibbles merged commit c76fc84 into learningequality:developJul 2, 2020
@jayoshihjayoshih mentioned this pull request Jul 7, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants

@jayoshih@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Admin page updates - #1977

Merged
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin
Jul 2, 2020
Merged

Admin page updates#1977
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 30, 2020

Copy link
Copy Markdown
Contributor

Description

Admin channel page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (more generalizable mixin generator)
  • Hooked up channel details/sharing modal options
  • Added channel size query
  • Updated to use new viewset backend
  • Added demo and source url fields

Admin user page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (used shared mixin)
  • Added user details modal
  • Added storage logic
  • Updated to use new viewset backend
  • Hooked up action logic
  • Added policies table
  • Added email workflow

Issues fixed

Implementation Notes (optional)

Includes changes from #1962 to avoid merge conflicts if possible

Does this introduce any tech-debt items?

Things to fix in channel CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Allow public/private switching (want to make this only available for admin users)
  • Restore (need to allow syncing on deleted channels)
  • Delete permanently (need to delete from database)
  • Channel sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Things to fix in user CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Fix activation/deactivation (admins only)
  • Set storage (admins only)
  • Revoke admin access (admins only)
  • Delete permanently (need to delete from database)
  • User sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are views organized into pages, components, and layouts directories as described in the docs?
  • Are there any new ways this uses user data that needs to be factored into our Privacy Policy?
  • Are there any new interactions that need to be added to the QA Sheet?

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Going to work on adding frontend tests soon

@jayoshihjayoshih changed the title Channel admin page updatesAdmin page updatesJul 2, 2020
@jayoshihjayoshih removed the WIP label Jul 2, 2020
@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Will open followup PR with tests

@codecov

codecovBot commented Jul 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1977 into develop will increase coverage by 0.26%.
The diff coverage is 71.28%.

Impacted file tree graph

@@ Coverage Diff @@## develop #1977 +/- ##
===========================================
+ Coverage 79.11% 79.38% +0.26% 
===========================================
Files 277 274 -3 Lines 13539 13134 -405 ===========================================
- Hits 10712 10427 -285 + Misses 2827 2707 -120 
Impacted FilesCoverage Δ
contentcuration/contentcuration/tasks.py72.64% <ø> (+0.87%)⬆️
contentcuration/contentcuration/views/admin.py69.38% <42.85%> (+1.75%)⬆️
...ontentcuration/contentcuration/viewsets/channel.py79.06% <67.56%> (-2.40%)⬇️
contentcuration/contentcuration/viewsets/user.py60.12% <74.00%> (+6.14%)⬆️
contentcuration/contentcuration/urls.py92.02% <100.00%> (+0.23%)⬆️
contentcuration/contentcuration/viewsets/common.py93.93% <100.00%> (+0.28%)⬆️
contentcuration/contentcuration/utils/format.py57.89% <0.00%> (-15.79%)⬇️
contentcuration/contentcuration/statistics.py31.45% <0.00%> (-5.65%)⬇️
contentcuration/contentcuration/serializers.py67.05% <0.00%> (-2.00%)⬇️
...ation/contentcuration/management/commands/setup.py

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b8b14f...ed63dab. Read the comment docs.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nothing blocking here!

fileSizeInTerabytes: '{n, number, integer} TB',
});

const ONE_B = 1;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Was about to comment on the constants.js above:

Maybe we should import these constants into mixins.js?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yep! I moved it to constants so that I can use it under other components (in this case UserStorage)

PRIVACY: 'privacy_policy',
};
export const policyDates = {
[policies.PRIVACY]: new Date(2018, 4, 25),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we have this date stored anywhere else? Is this just based on a git commit?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

We've mostly been hardcoding it in to keep track of the dates each new version was published

<template #header>
<span class="notranslate">{{ channel.name }}</span>
</template>
<template v-if="adminMode" #tabs>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think eventually it might make sense to break out the 'info' tab into a component and just have an admin specific modal that uses the info component and the sharing component - just the 'adminMode' gave me a lilttle pause, as adding additional mode props to components is often a sign we are trying to make one component do too much work!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Now that you mention it, I might be able to just use the Details component for its own modal

@rtibbles
rtibbles merged commit c76fc84 into learningequality:developJul 2, 2020
@jayoshihjayoshih mentioned this pull request Jul 7, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants

@jayoshih@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Admin page updates - #1977

Merged
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin
Jul 2, 2020
Merged

Admin page updates#1977
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 30, 2020

Copy link
Copy Markdown
Contributor

Description

Admin channel page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (more generalizable mixin generator)
  • Hooked up channel details/sharing modal options
  • Added channel size query
  • Updated to use new viewset backend
  • Added demo and source url fields

Admin user page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (used shared mixin)
  • Added user details modal
  • Added storage logic
  • Updated to use new viewset backend
  • Hooked up action logic
  • Added policies table
  • Added email workflow

Issues fixed

Implementation Notes (optional)

Includes changes from #1962 to avoid merge conflicts if possible

Does this introduce any tech-debt items?

Things to fix in channel CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Allow public/private switching (want to make this only available for admin users)
  • Restore (need to allow syncing on deleted channels)
  • Delete permanently (need to delete from database)
  • Channel sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Things to fix in user CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Fix activation/deactivation (admins only)
  • Set storage (admins only)
  • Revoke admin access (admins only)
  • Delete permanently (need to delete from database)
  • User sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are views organized into pages, components, and layouts directories as described in the docs?
  • Are there any new ways this uses user data that needs to be factored into our Privacy Policy?
  • Are there any new interactions that need to be added to the QA Sheet?

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Going to work on adding frontend tests soon

@jayoshihjayoshih changed the title Channel admin page updatesAdmin page updatesJul 2, 2020
@jayoshihjayoshih removed the WIP label Jul 2, 2020
@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Will open followup PR with tests

@codecov

codecovBot commented Jul 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1977 into develop will increase coverage by 0.26%.
The diff coverage is 71.28%.

Impacted file tree graph

@@ Coverage Diff @@## develop #1977 +/- ##
===========================================
+ Coverage 79.11% 79.38% +0.26% 
===========================================
Files 277 274 -3 Lines 13539 13134 -405 ===========================================
- Hits 10712 10427 -285 + Misses 2827 2707 -120 
Impacted FilesCoverage Δ
contentcuration/contentcuration/tasks.py72.64% <ø> (+0.87%)⬆️
contentcuration/contentcuration/views/admin.py69.38% <42.85%> (+1.75%)⬆️
...ontentcuration/contentcuration/viewsets/channel.py79.06% <67.56%> (-2.40%)⬇️
contentcuration/contentcuration/viewsets/user.py60.12% <74.00%> (+6.14%)⬆️
contentcuration/contentcuration/urls.py92.02% <100.00%> (+0.23%)⬆️
contentcuration/contentcuration/viewsets/common.py93.93% <100.00%> (+0.28%)⬆️
contentcuration/contentcuration/utils/format.py57.89% <0.00%> (-15.79%)⬇️
contentcuration/contentcuration/statistics.py31.45% <0.00%> (-5.65%)⬇️
contentcuration/contentcuration/serializers.py67.05% <0.00%> (-2.00%)⬇️
...ation/contentcuration/management/commands/setup.py

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b8b14f...ed63dab. Read the comment docs.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nothing blocking here!

fileSizeInTerabytes: '{n, number, integer} TB',
});

const ONE_B = 1;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Was about to comment on the constants.js above:

Maybe we should import these constants into mixins.js?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yep! I moved it to constants so that I can use it under other components (in this case UserStorage)

PRIVACY: 'privacy_policy',
};
export const policyDates = {
[policies.PRIVACY]: new Date(2018, 4, 25),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we have this date stored anywhere else? Is this just based on a git commit?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

We've mostly been hardcoding it in to keep track of the dates each new version was published

<template #header>
<span class="notranslate">{{ channel.name }}</span>
</template>
<template v-if="adminMode" #tabs>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think eventually it might make sense to break out the 'info' tab into a component and just have an admin specific modal that uses the info component and the sharing component - just the 'adminMode' gave me a lilttle pause, as adding additional mode props to components is often a sign we are trying to make one component do too much work!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Now that you mention it, I might be able to just use the Details component for its own modal

@rtibbles
rtibbles merged commit c76fc84 into learningequality:developJul 2, 2020
@jayoshihjayoshih mentioned this pull request Jul 7, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants

@jayoshih@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Admin page updates - #1977

Merged
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin
Jul 2, 2020
Merged

Admin page updates#1977
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 30, 2020

Copy link
Copy Markdown
Contributor

Description

Admin channel page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (more generalizable mixin generator)
  • Hooked up channel details/sharing modal options
  • Added channel size query
  • Updated to use new viewset backend
  • Added demo and source url fields

Admin user page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (used shared mixin)
  • Added user details modal
  • Added storage logic
  • Updated to use new viewset backend
  • Hooked up action logic
  • Added policies table
  • Added email workflow

Issues fixed

Implementation Notes (optional)

Includes changes from #1962 to avoid merge conflicts if possible

Does this introduce any tech-debt items?

Things to fix in channel CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Allow public/private switching (want to make this only available for admin users)
  • Restore (need to allow syncing on deleted channels)
  • Delete permanently (need to delete from database)
  • Channel sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Things to fix in user CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Fix activation/deactivation (admins only)
  • Set storage (admins only)
  • Revoke admin access (admins only)
  • Delete permanently (need to delete from database)
  • User sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are views organized into pages, components, and layouts directories as described in the docs?
  • Are there any new ways this uses user data that needs to be factored into our Privacy Policy?
  • Are there any new interactions that need to be added to the QA Sheet?

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Going to work on adding frontend tests soon

@jayoshihjayoshih changed the title Channel admin page updatesAdmin page updatesJul 2, 2020
@jayoshihjayoshih removed the WIP label Jul 2, 2020
@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Will open followup PR with tests

@codecov

codecovBot commented Jul 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1977 into develop will increase coverage by 0.26%.
The diff coverage is 71.28%.

Impacted file tree graph

@@ Coverage Diff @@## develop #1977 +/- ##
===========================================
+ Coverage 79.11% 79.38% +0.26% 
===========================================
Files 277 274 -3 Lines 13539 13134 -405 ===========================================
- Hits 10712 10427 -285 + Misses 2827 2707 -120 
Impacted FilesCoverage Δ
contentcuration/contentcuration/tasks.py72.64% <ø> (+0.87%)⬆️
contentcuration/contentcuration/views/admin.py69.38% <42.85%> (+1.75%)⬆️
...ontentcuration/contentcuration/viewsets/channel.py79.06% <67.56%> (-2.40%)⬇️
contentcuration/contentcuration/viewsets/user.py60.12% <74.00%> (+6.14%)⬆️
contentcuration/contentcuration/urls.py92.02% <100.00%> (+0.23%)⬆️
contentcuration/contentcuration/viewsets/common.py93.93% <100.00%> (+0.28%)⬆️
contentcuration/contentcuration/utils/format.py57.89% <0.00%> (-15.79%)⬇️
contentcuration/contentcuration/statistics.py31.45% <0.00%> (-5.65%)⬇️
contentcuration/contentcuration/serializers.py67.05% <0.00%> (-2.00%)⬇️
...ation/contentcuration/management/commands/setup.py

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b8b14f...ed63dab. Read the comment docs.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nothing blocking here!

fileSizeInTerabytes: '{n, number, integer} TB',
});

const ONE_B = 1;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Was about to comment on the constants.js above:

Maybe we should import these constants into mixins.js?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yep! I moved it to constants so that I can use it under other components (in this case UserStorage)

PRIVACY: 'privacy_policy',
};
export const policyDates = {
[policies.PRIVACY]: new Date(2018, 4, 25),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we have this date stored anywhere else? Is this just based on a git commit?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

We've mostly been hardcoding it in to keep track of the dates each new version was published

<template #header>
<span class="notranslate">{{ channel.name }}</span>
</template>
<template v-if="adminMode" #tabs>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think eventually it might make sense to break out the 'info' tab into a component and just have an admin specific modal that uses the info component and the sharing component - just the 'adminMode' gave me a lilttle pause, as adding additional mode props to components is often a sign we are trying to make one component do too much work!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Now that you mention it, I might be able to just use the Details component for its own modal

@rtibbles
rtibbles merged commit c76fc84 into learningequality:developJul 2, 2020
@jayoshihjayoshih mentioned this pull request Jul 7, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants

@jayoshih@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Admin page updates - #1977

Merged
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin
Jul 2, 2020
Merged

Admin page updates#1977
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 30, 2020

Copy link
Copy Markdown
Contributor

Description

Admin channel page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (more generalizable mixin generator)
  • Hooked up channel details/sharing modal options
  • Added channel size query
  • Updated to use new viewset backend
  • Added demo and source url fields

Admin user page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (used shared mixin)
  • Added user details modal
  • Added storage logic
  • Updated to use new viewset backend
  • Hooked up action logic
  • Added policies table
  • Added email workflow

Issues fixed

Implementation Notes (optional)

Includes changes from #1962 to avoid merge conflicts if possible

Does this introduce any tech-debt items?

Things to fix in channel CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Allow public/private switching (want to make this only available for admin users)
  • Restore (need to allow syncing on deleted channels)
  • Delete permanently (need to delete from database)
  • Channel sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Things to fix in user CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Fix activation/deactivation (admins only)
  • Set storage (admins only)
  • Revoke admin access (admins only)
  • Delete permanently (need to delete from database)
  • User sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are views organized into pages, components, and layouts directories as described in the docs?
  • Are there any new ways this uses user data that needs to be factored into our Privacy Policy?
  • Are there any new interactions that need to be added to the QA Sheet?

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Going to work on adding frontend tests soon

@jayoshihjayoshih changed the title Channel admin page updatesAdmin page updatesJul 2, 2020
@jayoshihjayoshih removed the WIP label Jul 2, 2020
@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Will open followup PR with tests

@codecov

codecovBot commented Jul 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1977 into develop will increase coverage by 0.26%.
The diff coverage is 71.28%.

Impacted file tree graph

@@ Coverage Diff @@## develop #1977 +/- ##
===========================================
+ Coverage 79.11% 79.38% +0.26% 
===========================================
Files 277 274 -3 Lines 13539 13134 -405 ===========================================
- Hits 10712 10427 -285 + Misses 2827 2707 -120 
Impacted FilesCoverage Δ
contentcuration/contentcuration/tasks.py72.64% <ø> (+0.87%)⬆️
contentcuration/contentcuration/views/admin.py69.38% <42.85%> (+1.75%)⬆️
...ontentcuration/contentcuration/viewsets/channel.py79.06% <67.56%> (-2.40%)⬇️
contentcuration/contentcuration/viewsets/user.py60.12% <74.00%> (+6.14%)⬆️
contentcuration/contentcuration/urls.py92.02% <100.00%> (+0.23%)⬆️
contentcuration/contentcuration/viewsets/common.py93.93% <100.00%> (+0.28%)⬆️
contentcuration/contentcuration/utils/format.py57.89% <0.00%> (-15.79%)⬇️
contentcuration/contentcuration/statistics.py31.45% <0.00%> (-5.65%)⬇️
contentcuration/contentcuration/serializers.py67.05% <0.00%> (-2.00%)⬇️
...ation/contentcuration/management/commands/setup.py

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b8b14f...ed63dab. Read the comment docs.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nothing blocking here!

fileSizeInTerabytes: '{n, number, integer} TB',
});

const ONE_B = 1;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Was about to comment on the constants.js above:

Maybe we should import these constants into mixins.js?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yep! I moved it to constants so that I can use it under other components (in this case UserStorage)

PRIVACY: 'privacy_policy',
};
export const policyDates = {
[policies.PRIVACY]: new Date(2018, 4, 25),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we have this date stored anywhere else? Is this just based on a git commit?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

We've mostly been hardcoding it in to keep track of the dates each new version was published

<template #header>
<span class="notranslate">{{ channel.name }}</span>
</template>
<template v-if="adminMode" #tabs>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think eventually it might make sense to break out the 'info' tab into a component and just have an admin specific modal that uses the info component and the sharing component - just the 'adminMode' gave me a lilttle pause, as adding additional mode props to components is often a sign we are trying to make one component do too much work!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Now that you mention it, I might be able to just use the Details component for its own modal

@rtibbles
rtibbles merged commit c76fc84 into learningequality:developJul 2, 2020
@jayoshihjayoshih mentioned this pull request Jul 7, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants

@jayoshih@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Admin page updates - #1977

Merged
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin
Jul 2, 2020
Merged

Admin page updates#1977
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 30, 2020

Copy link
Copy Markdown
Contributor

Description

Admin channel page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (more generalizable mixin generator)
  • Hooked up channel details/sharing modal options
  • Added channel size query
  • Updated to use new viewset backend
  • Added demo and source url fields

Admin user page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (used shared mixin)
  • Added user details modal
  • Added storage logic
  • Updated to use new viewset backend
  • Hooked up action logic
  • Added policies table
  • Added email workflow

Issues fixed

Implementation Notes (optional)

Includes changes from #1962 to avoid merge conflicts if possible

Does this introduce any tech-debt items?

Things to fix in channel CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Allow public/private switching (want to make this only available for admin users)
  • Restore (need to allow syncing on deleted channels)
  • Delete permanently (need to delete from database)
  • Channel sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Things to fix in user CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Fix activation/deactivation (admins only)
  • Set storage (admins only)
  • Revoke admin access (admins only)
  • Delete permanently (need to delete from database)
  • User sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are views organized into pages, components, and layouts directories as described in the docs?
  • Are there any new ways this uses user data that needs to be factored into our Privacy Policy?
  • Are there any new interactions that need to be added to the QA Sheet?

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Going to work on adding frontend tests soon

@jayoshihjayoshih changed the title Channel admin page updatesAdmin page updatesJul 2, 2020
@jayoshihjayoshih removed the WIP label Jul 2, 2020
@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Will open followup PR with tests

@codecov

codecovBot commented Jul 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1977 into develop will increase coverage by 0.26%.
The diff coverage is 71.28%.

Impacted file tree graph

@@ Coverage Diff @@## develop #1977 +/- ##
===========================================
+ Coverage 79.11% 79.38% +0.26% 
===========================================
Files 277 274 -3 Lines 13539 13134 -405 ===========================================
- Hits 10712 10427 -285 + Misses 2827 2707 -120 
Impacted FilesCoverage Δ
contentcuration/contentcuration/tasks.py72.64% <ø> (+0.87%)⬆️
contentcuration/contentcuration/views/admin.py69.38% <42.85%> (+1.75%)⬆️
...ontentcuration/contentcuration/viewsets/channel.py79.06% <67.56%> (-2.40%)⬇️
contentcuration/contentcuration/viewsets/user.py60.12% <74.00%> (+6.14%)⬆️
contentcuration/contentcuration/urls.py92.02% <100.00%> (+0.23%)⬆️
contentcuration/contentcuration/viewsets/common.py93.93% <100.00%> (+0.28%)⬆️
contentcuration/contentcuration/utils/format.py57.89% <0.00%> (-15.79%)⬇️
contentcuration/contentcuration/statistics.py31.45% <0.00%> (-5.65%)⬇️
contentcuration/contentcuration/serializers.py67.05% <0.00%> (-2.00%)⬇️
...ation/contentcuration/management/commands/setup.py

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b8b14f...ed63dab. Read the comment docs.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nothing blocking here!

fileSizeInTerabytes: '{n, number, integer} TB',
});

const ONE_B = 1;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Was about to comment on the constants.js above:

Maybe we should import these constants into mixins.js?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yep! I moved it to constants so that I can use it under other components (in this case UserStorage)

PRIVACY: 'privacy_policy',
};
export const policyDates = {
[policies.PRIVACY]: new Date(2018, 4, 25),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we have this date stored anywhere else? Is this just based on a git commit?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

We've mostly been hardcoding it in to keep track of the dates each new version was published

<template #header>
<span class="notranslate">{{ channel.name }}</span>
</template>
<template v-if="adminMode" #tabs>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think eventually it might make sense to break out the 'info' tab into a component and just have an admin specific modal that uses the info component and the sharing component - just the 'adminMode' gave me a lilttle pause, as adding additional mode props to components is often a sign we are trying to make one component do too much work!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Now that you mention it, I might be able to just use the Details component for its own modal

@rtibbles
rtibbles merged commit c76fc84 into learningequality:developJul 2, 2020
@jayoshihjayoshih mentioned this pull request Jul 7, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants

@jayoshih@rtibbles
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Admin page updates - #1977

Merged
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin
Jul 2, 2020
Merged

Admin page updates#1977
rtibbles merged 24 commits into
learningequality:developfrom
jayoshih:vue-admin

Conversation

@jayoshih

@jayoshihjayoshih commented Jun 30, 2020

Copy link
Copy Markdown
Contributor

Description

Admin channel page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (more generalizable mixin generator)
  • Hooked up channel details/sharing modal options
  • Added channel size query
  • Updated to use new viewset backend
  • Added demo and source url fields

Admin user page:

  • Freeze first column and row so you can still access the scrollbars
  • Updated the way filtering is handled (used shared mixin)
  • Added user details modal
  • Added storage logic
  • Updated to use new viewset backend
  • Hooked up action logic
  • Added policies table
  • Added email workflow

Issues fixed

Implementation Notes (optional)

Includes changes from #1962 to avoid merge conflicts if possible

Does this introduce any tech-debt items?

Things to fix in channel CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Allow public/private switching (want to make this only available for admin users)
  • Restore (need to allow syncing on deleted channels)
  • Delete permanently (need to delete from database)
  • Channel sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Things to fix in user CRUD follow up:

  • Fix syncing to fire reliably (doesn't seem to fire consistently)
  • Fix activation/deactivation (admins only)
  • Set storage (admins only)
  • Revoke admin access (admins only)
  • Delete permanently (need to delete from database)
  • User sorting (ascending/descending)
  • Sort by filter
  • In general, make sure all the filters are working

Checklist

  • Is the code clean and well-commented?
  • Has the docs label been added if this introduces a change that needs to be updated in the user docs?
  • Has the CHANGELOG label been added to this pull request? Items with this label will be added to the CHANGELOG at a later time
  • Are there tests for this change?
  • Are all UI components LTR and RTL compliant (if applicable)?
  • Are views organized into pages, components, and layouts directories as described in the docs?
  • Are there any new ways this uses user data that needs to be factored into our Privacy Policy?
  • Are there any new interactions that need to be added to the QA Sheet?

@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Going to work on adding frontend tests soon

@jayoshihjayoshih changed the title Channel admin page updatesAdmin page updatesJul 2, 2020
@jayoshihjayoshih removed the WIP label Jul 2, 2020
@jayoshih

Copy link
Copy Markdown
ContributorAuthor

Will open followup PR with tests

@codecov

codecovBot commented Jul 2, 2020

Copy link
Copy Markdown

Codecov Report

Merging #1977 into develop will increase coverage by 0.26%.
The diff coverage is 71.28%.

Impacted file tree graph

@@ Coverage Diff @@## develop #1977 +/- ##
===========================================
+ Coverage 79.11% 79.38% +0.26% 
===========================================
Files 277 274 -3 Lines 13539 13134 -405 ===========================================
- Hits 10712 10427 -285 + Misses 2827 2707 -120 
Impacted FilesCoverage Δ
contentcuration/contentcuration/tasks.py72.64% <ø> (+0.87%)⬆️
contentcuration/contentcuration/views/admin.py69.38% <42.85%> (+1.75%)⬆️
...ontentcuration/contentcuration/viewsets/channel.py79.06% <67.56%> (-2.40%)⬇️
contentcuration/contentcuration/viewsets/user.py60.12% <74.00%> (+6.14%)⬆️
contentcuration/contentcuration/urls.py92.02% <100.00%> (+0.23%)⬆️
contentcuration/contentcuration/viewsets/common.py93.93% <100.00%> (+0.28%)⬆️
contentcuration/contentcuration/utils/format.py57.89% <0.00%> (-15.79%)⬇️
contentcuration/contentcuration/statistics.py31.45% <0.00%> (-5.65%)⬇️
contentcuration/contentcuration/serializers.py67.05% <0.00%> (-2.00%)⬇️
...ation/contentcuration/management/commands/setup.py

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7b8b14f...ed63dab. Read the comment docs.

@rtibblesrtibbles left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Nothing blocking here!

fileSizeInTerabytes: '{n, number, integer} TB',
});

const ONE_B = 1;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Was about to comment on the constants.js above:

Maybe we should import these constants into mixins.js?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Yep! I moved it to constants so that I can use it under other components (in this case UserStorage)

PRIVACY: 'privacy_policy',
};
export const policyDates = {
[policies.PRIVACY]: new Date(2018, 4, 25),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Do we have this date stored anywhere else? Is this just based on a git commit?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

We've mostly been hardcoding it in to keep track of the dates each new version was published

<template #header>
<span class="notranslate">{{ channel.name }}</span>
</template>
<template v-if="adminMode" #tabs>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I think eventually it might make sense to break out the 'info' tab into a component and just have an admin specific modal that uses the info component and the sharing component - just the 'adminMode' gave me a lilttle pause, as adding additional mode props to components is often a sign we are trying to make one component do too much work!

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Now that you mention it, I might be able to just use the Details component for its own modal

@rtibbles
rtibbles merged commit c76fc84 into learningequality:developJul 2, 2020
@jayoshihjayoshih mentioned this pull request Jul 7, 2020
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants

@jayoshih@rtibbles