* Removes outdated precommit scripts
* Updates eslint, prettier, stylelint and their configurations: turns on plugins that were installed but off
* Fixes stylelint errors
* Applies prettier to css files
* Fixes new eslint errors
* Updates lint script to include both stylelint and eslint
* Install @tanstack/react-router
* Fix with imported switch
* Refactor redirect to new search parser
* Deregister timeout in ComparisonInput
* Comment uses of window.location
* Fix with imported switch appearing in realtime dashboard
* Handle not found routes more gracefully
* WIP
* Fix issue with more than one page cached
* Make sure we don't access properties of undefined objects
* slight cleanup
* reset limit to 100
* add back the bottom loading spinner when fetching next page
* disable refetchOnWindowFocus in the global queryClient
* render bottom loading spinner only when fetching next page
* create a wrapper for react-query
* fix exhaustive deps warnings in modals
* always pass the full api path to BreakdownModal
* improve function doc
---------
Co-authored-by: Robert Joonas <robertjoonas16@gmail.com>
Co-authored-by: RobertJoonas <56999674+RobertJoonas@users.noreply.github.com>
* Create a new BreakdownModal component and use it for Entry Pages
* Add search functionality into the new component
* Adjust FilterLink component and use it in BreakdownModal
* pass addSearchFilter fn through props
* pass fn props as useCallback
* add a function doc to BreakdownModal
* refactor: create a Metric class
* Fixup: use Metric class for defining BreakdownModal metrics
* keep revenueAvailable state in the Dashboard component
* move query context into a higher-order component
* fix react key error in BreakdownModal
* use BreakdownModal in PropsModal
* adjust EntryPagesModal to use query context
* fix variable name typo
* fixup: BreakdownModal function doc
* use BreakdownModal in SourcesModal
* use Breakdown modal in ReferrerDrilldownModal
* use BreakdownModal in PagesModal
* use BreakdownModal in ExitPagesModal
* replace ModalTable with LocationsModal and use BreakdownModal in it
* use BreakdownModal in Conversions
* make sure next pages are loaded with 'detailed: true'
* replace loading spinner logic in BreakdownModal
* fix two flaky tests
* unfocus search input element on Escape keyup event
* ignore Escape keyup handling when search disabled
* Review suggestion: remove redundant state
* do not fetch data on every search input change
* use longer variable names
* do not define renderIcon callbacks conditionally
* deconstruct props in function header of BreakdownModal
* refactor searchEnabled being true by default
* move imported.ex to imported subfolder
* move constructing base imported query into a separate module
* Implement imported table deciding and filtering
+ tests for pages, entry_pages, exit_pages and common filter types
* add top stats test with country filter
* add timeseries test
* Drop bounce_rate and time_on_page from imported & page-filtered Top Stats
* rename field returned by top stats
* turn pages into a fn comp
* Move dashboard API results under a results key
...and also return the skip_imported_reason to the frontend to be used
for displaying warnings.
* extend ListReport component with an optional afterFetchData prop
* turn Devices into a fn comp
* add not_requested as a skip_imported_reason
* display warning icons in the dashboard
* Implement filtering suggestions and translate filter fields for imported
* WIP
* Improve and cover filtering suggestions with tests
* Rename imported suggestions query helpers
* fix screen size breakdown with screen size filter
* support filtering by the same suggestion property
* support location filters when fetching location suggestions
* support filtering by multiple props from the same table
* Implement filtering by goals
* Make views per visit metric work for import entry and exit pages
* Get rid of circular dependencies between Stats.Imported and Stats.Imported.Base
* Clean up Query struct manipulation in Breakdown
* Rename helper function for clarity
* Automatically refresh query struct state after modifications
* Shutup credo
* display imported warning bubble in prop breakdown section
* Render warning bubble for funnels whenever imported data is in the view
* Transform any operator on respective goal filters
* Fix percentage and conversion_rate calculation in presence of custom props
* add tests for for combining page and pageview goal filters
* add skip_refresh option to query tweaking functions
* add imported CR support for timeseries
* still show url breakdown when special goal + url in filter
* rename Query.refresh
* use flat_map instead of map and concat
* fix darkmode color
* Handle invalid imported region codes in suggestions gracefully
* Add an entry to CHANGELOG.md
---------
Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
* Make React frontend capable of reading API results under a results key
* remove redundant double negation
* Update assets/js/dashboard/stats/modals/props.js
add length key back
Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
---------
Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
* Start refactoring, supporting jsonurl
* WIP: Listing of applied filters works
* WIP: Remove some unneeded hackery
* WIP: Handle country labels better
* WIP: Handle multiple filters better
* WIP: Serializing filters for API queries
* Split modal code into 3
* Merge code paths for prop and other filter modals
* Get suggestions working again
* Display prop filters properly
* Handle re-opening a props modal properly
* Better label handling
* Better linking to filter modals
* Remove unneeded component
* Standardize how we update query more
* Use updatedQuery to remove more usecases of URLSearchParams
* Dont export toFilterQuery
* Custom toString for PlausibleSearchParams
* Fix props suggestions/filtering
* Refactor isFilteringOnFixedValue
* Improved encoding - goals now work again
* fix a typo
* Handle more cases where query.filters[ is used
* Fix locations tab changing behavior
* Fix for `setQuery` not to double up ?
* Handle goal filters properly now
* Delete dead code
* Update special goals handling
* Update <ListReport /> linking
* Show labeled values in list of filters
* Updae Props component handling of storage keys
* re-add special case handling in devices view
* Fix modal-related typo
* Get updatedQuery callsites working
* Update location modals linking
* Update props details model linking logic
* Switch back tab from props when removing goal filter
* Remove query.filters usage from within <Referrers /> component
* Private escapeFilterValue
* Fix sources/index.js
* Legacy redirect logic
* Update comment
* Disabled options in props modal
* Update escaping and is_not operator
* Restore `false` search property handling meaning unset
* changelog
* Fix filtering after clicking on a map
* FilterOperatorSelector
* replaceFilterByPrefix
* Improve naming for filter modals/groups
* refactor SourceList to use ListReport
* refactor SourceList into a fn comp
* change referrer-drilldown API response format and remove dead code
* use ListReport in referrer-list
* fix CI
* fix flaky test
* remove IO.inspect
* Use dayjs with UTC plugin for date-formatter
* Remove 'toHuman' function
* Use dayjs dates in Datepicker component
* Use util/date.js functions in date formatter
* Remove `fromJSDate`
* Use formatISO instead of raw dayjs formatter
* Add details=True to export API parameters
This makes the ZIP export add `%{"details" => "True"}` to the query's
`params` when fetching data internally for packaging in the ZIP.
This adds bounce_rate and time_on_page to the data in pages.csv, and
bounce_rate and visit_duration to sources.csv.
* Make API return data with consistent names
Some of the data types returned via the JSON or CSV API use inconsistent
naming, and some have redundant name changes (i.e. count -> visitors ->
count). This makes these all consistent and removes the redundancy.
This addresses #1426, fixes some of the CSV headers, and unifies the
JSON and CSV return data labels.
* Update changelog
* Test should use Timex.shift, not relative time
* Return full country names in CSV export
This also replaces the " character with ' in two country names, as those
are the characters used in the names, yielding a more predictable and
'correct' output.
* Fetch CSV exported data concurrently
* Use spinner to indicate when export has started
* Use 300 as default number of brekadown entries for export
Higher numbers (e.g. 1000) seem to cause clickhouse errors when there
many pages to request. It is unclear what is causing the error, as
clickhouse returns an "unknown" error code and an empty error message.
and so was just annoying
2. Get rid of all existing ESLint errors.
2a. Turned off `react/display-name` because I couldn't figure out how to
make that wrapped component have a display name. If anyone can figure it
out, that'd be great, because that makes things nicer when using the
React debugger.
2b. The part where it says `plausible()` is undefined in `app.js` is
bothering me. I disabled the check because I can't figure out where that
actually comes from to put in the proper import.
2c. Told ESLint we're using Babel.
3. Added `npm run format` and `npm run lint` commands.
* chore(docker): improve repeat contributions workflow
* This change adds two new commands to gracefully stop and remove the Postgres and Clickhouse docker containers. To do so, it also gives them a recognizable name.
* Additionally, the Postgres container is updated to use a named volume for its data. This lower friction for repeat contributions where one would otherwise sign up and activate their accounts again and again each time.
* Format countries modal
* Remove unused imports
* Run ESLint and make related fixes
* ESlint formatting for entry pages modal
* WIP: proof of concept for scrollable modals on mobile
* Fix modals being too wide on desktop
* Make modals truly responsive
This fixes the desktop behaviour completely now.
* Update changelog with modals responsiveness
* Update desktop modal width to 860px
It was an oversight to set it at 800px in the first place.
Co-authored-by: Uku Taht <Uku.taht@gmail.com>
* First pass
Needs more testing & potentially cleanup
* Fixes tests, error handling
* Formatting
* Removes broken test
* Fixes inconsistent test
This was due to Clickhouse setup not inserting the sessions with the exact same timestamp consistently and making the test inconsistent
* Combines `include` param, asyncs time_on_page and bounce_rate
* Fixes CH error when no pageviews exist in period
* Format
* Changelog
* Increases await timeout to accomodate larger data sets
* Improves handling of timeout behavior
* Fixes session-based filtering on time on page queries
* Formatting
* Removes old forced entry page modal from top pages report
* 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
* Resolves @ukutaht's comments on #467
* Fixes missing dark style
* Found one more missed dark element (shared links)
* Formatting fixes
* Referrer drilldown
* Render external links for referrer drilldown modal
* Rename top pages to entry pages
* Add google keywords to referrer drilldown
* Fix link in source modal
* Remove back link from referrer drilldown
* Fix tests
* Mix format
* Remove unused function
* Get top stats from the events table
* Revert "Get top stats from the events table"
This reverts commit 67384e2d35.
* Fix pages modal title
* Improve pages report in referrer drilldown
* Fix label in referrer drilldown
* Auto-updating dashboard with realtime info
* Remove extra route
* Draw list of countries next to the map
* Nice animations
* Do not show bounce rates in realtime modals
* Update countries and devices in realtime
* Remove unused component
* Show total pageviews in the last 30 minutes
* Show proper labels
* Remove unnecessary z-index
* Fix label for main graph
* Fix compiler warnings
* Add tests
* Fix copy pluralizations
* Fix copy in countries modal
* Real-time -> Realtime
* Looser test assertion
* Show last 30 minutes conversions on realtime report
* Remove EventTarget API because it doesn't work on Safari
* Get referrer drilldown from sessions table
* Fix failing tests
* Use site id instead of hostname for events
* Use site id in domain status check
* Revert change to tracking module
* Catch more places where link generation needed updating
* Rename site_id to domain
* Drop hostname index from events
* Load dashboard with react
* Rename stast2 to dashboard
* Save timeframe on the frontend
* Implement current visitors
* Implement comparisons
* React to route changes
* Add modals
* Show number of visitors on hover
* Show 'Today' for today
* Add 30 days
* Show referrer drilldown
* Arrow keys to go back and forward
* Improve comparisons UI
* Fix dropdown when clicking on it
* Verify API access in a memoized fashion
* Test API access
* Test stats through controller
* Move map formatting from stats controller to stats
* Remove unused code
* Remove dead code from query
* Remove dead code from stats templates
* Add stats view test back in
* Render modal inside the modal component
* Implement google search terms
* Add explanation for screen sizes
* Separate dashboard JS from the app js