analytics/assets/js/dashboard/pinned-header-hoc.js

36 lines
876 B
JavaScript
Raw Normal View History

Adds sticky header row (site selection, date, filters) (#472) * Adds New Dark Mode Assets * Moves triangle for dropdown to a reasonable position * Majority .eex dark implementation * Fixes Logo Positioning * Adds theme flag to user schema, uses it * Uses correct variables for theme applicator script * Minor missed theme changes/fallbacks * Individual Component Support + Theme Context * Sources Tab Support This was a pain to test D: * Partial Stats Sections Support * More of stats modules supported * Modal +table support * Improves some Flatpickr in light theme, supports dark theme * Fixes missed settings tab colors * Finishes Devices module support * Fixes bar graph colors * Better colorizes maps module * Undoes colorized bars (they looked bad, on second thought) * Fixes loading indicator * Finishes conversions module * Adds changelog entry The PR number could be wrong, will double check * Fixes missed header color * Fixes naming of migration and removes static alter * Does migration correctly As I said, my Elixir is pretty weak heh * Adds support for spike notifications setting * Improves contrast and visibility for email settings * Add initial implementation for sticky header * Minor mobile formatting improvements * Finishes (probably) pinned header feature * Adds changelog entry for pinned header * Updates PR number in sticky header changelog entry * Wraps up code cleanup + feature * Merge conflicts are hard, apparently * Removes extraneous tailwind variants * Fixes mentioned issues * Removes option to unsticky * py-3 * Tailwind in CSS
2020-12-22 16:39:14 +03:00
import React from 'react';
export const withPinnedHeader = (WrappedComponent, flagName) => {
return class extends React.Component {
constructor(props) {
super(props)
this.state = {
stuck: false
}
}
componentDidMount() {
this.observer = new IntersectionObserver((entries) => {
if (entries[0].intersectionRatio === 0)
this.setState({ stuck: true });
else if (entries[0].intersectionRatio === 1)
this.setState({ stuck: false });
}, {
threshold: [0, 1]
});
this.observer.observe(document.querySelector("#stats-container-top"));
}
componentWillUnmount() {
this.observer.unobserve(document.querySelector("#stats-container-top"));
}
render() {
return (
<WrappedComponent stuck={this.state.stuck}{...this.props}/>
);
}
}
}