diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index 2dc5b675..00000000 --- a/.github/stale.yml +++ /dev/null @@ -1,19 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security - - enhancement - - bug -# Label to use when marking an issue as stale -staleLabel: wontfix -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml new file mode 100644 index 00000000..bf2505b1 --- /dev/null +++ b/.github/workflows/stale-issues.yml @@ -0,0 +1,22 @@ +name: Close stale issues +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v8 + with: + days-before-issue-stale: 60 + days-before-issue-close: 7 + stale-issue-label: 'stale' + stale-issue-message: 'This issue is stale because it has been open for 60 days with no activity.' + close-issue-message: 'This issue was closed because it has been inactive for 7 days since being marked as stale.' + days-before-pr-stale: -1 + days-before-pr-close: -1 + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 7066fb28..99087ab5 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ node_modules *.iml *.log .vscode +.tool-versions # debug npm-debug.log* diff --git a/assets/bar-chart.svg b/assets/bar-chart.svg new file mode 100644 index 00000000..25a182a3 --- /dev/null +++ b/assets/bar-chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/components/icons.ts b/components/icons.ts index efd6914b..e42b15fe 100644 --- a/components/icons.ts +++ b/components/icons.ts @@ -1,5 +1,7 @@ import { Icons } from 'react-basics'; import AddUser from 'assets/add-user.svg'; +import Bars from 'assets/bars.svg'; +import BarChart from 'assets/bar-chart.svg'; import Bolt from 'assets/bolt.svg'; import Calendar from 'assets/calendar.svg'; import Clock from 'assets/clock.svg'; @@ -22,6 +24,8 @@ import Visitor from 'assets/visitor.svg'; const icons = { ...Icons, AddUser, + Bars, + BarChart, Bolt, Calendar, Clock, diff --git a/components/input/RefreshButton.js b/components/input/RefreshButton.js index 444f3247..de7ce8cf 100644 --- a/components/input/RefreshButton.js +++ b/components/input/RefreshButton.js @@ -10,11 +10,7 @@ export function RefreshButton({ websiteId, isLoading }) { function handleClick() { if (!isLoading && dateRange) { - if (/^\d+/.test(dateRange.value)) { - setWebsiteDateRange(websiteId, dateRange.value); - } else { - setWebsiteDateRange(websiteId, dateRange); - } + setWebsiteDateRange(websiteId, dateRange); } } diff --git a/components/input/WebsiteDateFilter.js b/components/input/WebsiteDateFilter.js index 91721974..47e6f016 100644 --- a/components/input/WebsiteDateFilter.js +++ b/components/input/WebsiteDateFilter.js @@ -1,25 +1,13 @@ -import useApi from 'hooks/useApi'; import useDateRange from 'hooks/useDateRange'; import DateFilter from './DateFilter'; import styles from './WebsiteDateFilter.module.css'; export default function WebsiteDateFilter({ websiteId }) { - const { get } = useApi(); const [dateRange, setDateRange] = useDateRange(websiteId); const { value, startDate, endDate } = dateRange; const handleChange = async value => { - if (value === 'all' && websiteId) { - const data = await get(`/websites/${websiteId}`); - - if (data) { - const start = new Date(data.createdAt).getTime(); - const end = Date.now(); - setDateRange(`range:${start}:${end}`); - } - } else if (value !== 'all') { - setDateRange(value); - } + setDateRange(value); }; return ( diff --git a/components/messages.js b/components/messages.js index d41c4430..32c89687 100644 --- a/components/messages.js +++ b/components/messages.js @@ -81,6 +81,7 @@ export const labels = defineMessages({ devices: { id: 'label.devices', defaultMessage: 'Devices' }, countries: { id: 'label.countries', defaultMessage: 'Countries' }, languages: { id: 'label.languages', defaultMessage: 'Languages' }, + event: { id: 'label.event', defaultMessage: 'Event' }, events: { id: 'label.events', defaultMessage: 'Events' }, query: { id: 'label.query', defaultMessage: 'Query' }, queryParameters: { id: 'label.query-parameters', defaultMessage: 'Query parameters' }, @@ -159,6 +160,7 @@ export const labels = defineMessages({ value: { id: 'labels.value', defaultMessage: 'Value' }, overview: { id: 'labels.overview', defaultMessage: 'Overview' }, totalRecords: { id: 'labels.total-records', defaultMessage: 'Total records' }, + insights: { id: 'label.insights', defaultMessage: 'Insights' }, }); export const messages = defineMessages({ @@ -270,4 +272,8 @@ export const messages = defineMessages({ id: 'message.no-event-data', defaultMessage: 'No event data is available.', }, + newVersionAvailable: { + id: 'new-version-available', + defaultMessage: 'A new version of Umami {version} is available!', + }, }); diff --git a/components/metrics/ActiveUsers.js b/components/metrics/ActiveUsers.js index e79b977d..64051946 100644 --- a/components/metrics/ActiveUsers.js +++ b/components/metrics/ActiveUsers.js @@ -29,7 +29,7 @@ export function ActiveUsers({ websiteId, value, refetchInterval = 60000 }) { } return ( - +
{formatMessage(messages.activeUsers, { x: count })}
); diff --git a/components/metrics/ActiveUsers.module.css b/components/metrics/ActiveUsers.module.css index cc231d16..1d87fcd8 100644 --- a/components/metrics/ActiveUsers.module.css +++ b/components/metrics/ActiveUsers.module.css @@ -1,10 +1,14 @@ .container { display: flex; align-items: center; + margin-left: 20px; } .text { display: flex; + white-space: nowrap; + font-size: var(--font-size-md); + font-weight: 400; } .value { diff --git a/components/pages/dashboard/Dashboard.js b/components/pages/dashboard/Dashboard.js index 07921dae..2d9756db 100644 --- a/components/pages/dashboard/Dashboard.js +++ b/components/pages/dashboard/Dashboard.js @@ -18,7 +18,9 @@ export function Dashboard({ userId }) { const { showCharts, limit, editing } = dashboard; const [max, setMax] = useState(limit); const { get, useQuery } = useApi(); - const { data, isLoading, error } = useQuery(['websites'], () => get('/websites', { userId })); + const { data, isLoading, error } = useQuery(['websites'], () => + get('/websites', { userId, includeTeams: 1 }), + ); const hasData = data && data.length !== 0; const { dir } = useLocale(); diff --git a/components/pages/dashboard/DashboardSettingsButton.js b/components/pages/dashboard/DashboardSettingsButton.js index a963aa5f..99dab14f 100644 --- a/components/pages/dashboard/DashboardSettingsButton.js +++ b/components/pages/dashboard/DashboardSettingsButton.js @@ -1,4 +1,4 @@ -import { Menu, Icon, Text, PopupTrigger, Popup, Item, Button } from 'react-basics'; +import { TooltipPopup, Icon, Text, Flexbox, Popup, Item, Button } from 'react-basics'; import Icons from 'components/icons'; import { saveDashboard } from 'store/dashboard'; import useMessages from 'hooks/useMessages'; @@ -6,40 +6,30 @@ import useMessages from 'hooks/useMessages'; export function DashboardSettingsButton() { const { formatMessage, labels } = useMessages(); - const menuOptions = [ - { - label: formatMessage(labels.toggleCharts), - value: 'charts', - }, - { - label: formatMessage(labels.editDashboard), - value: 'order', - }, - ]; + const handleToggleCharts = () => { + saveDashboard(state => ({ showCharts: !state.showCharts })); + }; - function handleSelect(value) { - if (value === 'charts') { - saveDashboard(state => ({ showCharts: !state.showCharts })); - } - if (value === 'order') { - saveDashboard({ editing: true }); - } - } + const handleEdit = () => { + saveDashboard({ editing: true }); + }; return ( - - + + - - - {({ label, value }) => {label}} - - - + ); } diff --git a/components/pages/event-data/EventDataTable.js b/components/pages/event-data/EventDataTable.js index 2724962f..8260ac35 100644 --- a/components/pages/event-data/EventDataTable.js +++ b/components/pages/event-data/EventDataTable.js @@ -13,14 +13,15 @@ export function EventDataTable({ data = [] }) { return ( + + {row => ( + + {row.event} + + )} + - {row => { - return ( - - {row.field} - - ); - }} + {row => row.field} {({ total }) => total.toLocaleString()} diff --git a/components/pages/event-data/EventDataValueTable.js b/components/pages/event-data/EventDataValueTable.js index 2a20c9b0..2637053e 100644 --- a/components/pages/event-data/EventDataValueTable.js +++ b/components/pages/event-data/EventDataValueTable.js @@ -5,14 +5,14 @@ import Icons from 'components/icons'; import PageHeader from 'components/layout/PageHeader'; import Empty from 'components/common/Empty'; -export function EventDataTable({ data = [], field }) { +export function EventDataValueTable({ data = [], event }) { const { formatMessage, labels } = useMessages(); const { resolveUrl } = usePageQuery(); const Title = () => { return ( <> - + - {field} + {event} ); }; @@ -31,6 +31,7 @@ export function EventDataTable({ data = [], field }) { {data.length <= 0 && } {data.length > 0 && ( + {({ total }) => total.toLocaleString()} @@ -41,4 +42,4 @@ export function EventDataTable({ data = [], field }) { ); } -export default EventDataTable; +export default EventDataValueTable; diff --git a/components/pages/realtime/RealtimeCountries.js b/components/pages/realtime/RealtimeCountries.js index 525eb28f..62964eab 100644 --- a/components/pages/realtime/RealtimeCountries.js +++ b/components/pages/realtime/RealtimeCountries.js @@ -1,17 +1,26 @@ import { useCallback } from 'react'; +import { useRouter } from 'next/router'; import DataTable from 'components/metrics/DataTable'; import useLocale from 'hooks/useLocale'; import useCountryNames from 'hooks/useCountryNames'; import useMessages from 'hooks/useMessages'; +import classNames from 'classnames'; +import styles from './RealtimeCountries.module.css'; export function RealtimeCountries({ data }) { const { formatMessage, labels } = useMessages(); const { locale } = useLocale(); const countryNames = useCountryNames(locale); + const { basePath } = useRouter(); const renderCountryName = useCallback( - ({ x }) => {countryNames[x]}, - [countryNames, locale], + ({ x: code }) => ( + + {code} + {countryNames[code]} + + ), + [countryNames, locale, basePath], ); return ( diff --git a/components/pages/realtime/RealtimeCountries.module.css b/components/pages/realtime/RealtimeCountries.module.css new file mode 100644 index 00000000..e55063c3 --- /dev/null +++ b/components/pages/realtime/RealtimeCountries.module.css @@ -0,0 +1,5 @@ +.row { + display: flex; + align-items: center; + gap: 10px; +} diff --git a/components/pages/realtime/RealtimePage.js b/components/pages/realtime/RealtimePage.js index 2d2eceba..dea89f58 100644 --- a/components/pages/realtime/RealtimePage.js +++ b/components/pages/realtime/RealtimePage.js @@ -94,7 +94,7 @@ export function RealtimePage({ websiteId }) {
- +
diff --git a/components/pages/reports/event-data/FieldAddForm.js b/components/pages/reports/FieldAddForm.js similarity index 86% rename from components/pages/reports/event-data/FieldAddForm.js rename to components/pages/reports/FieldAddForm.js index c95fcac3..e8831247 100644 --- a/components/pages/reports/event-data/FieldAddForm.js +++ b/components/pages/reports/FieldAddForm.js @@ -1,10 +1,10 @@ import { useState } from 'react'; import { createPortal } from 'react-dom'; import { REPORT_PARAMETERS } from 'lib/constants'; -import PopupForm from '../PopupForm'; -import FieldSelectForm from '../FieldSelectForm'; -import FieldAggregateForm from '../FieldAggregateForm'; -import FieldFilterForm from '../FieldFilterForm'; +import PopupForm from './PopupForm'; +import FieldSelectForm from './FieldSelectForm'; +import FieldAggregateForm from './FieldAggregateForm'; +import FieldFilterForm from './FieldFilterForm'; import styles from './FieldAddForm.module.css'; export function FieldAddForm({ fields = [], group, element, onAdd, onClose }) { diff --git a/components/pages/reports/event-data/FieldAddForm.module.css b/components/pages/reports/FieldAddForm.module.css similarity index 100% rename from components/pages/reports/event-data/FieldAddForm.module.css rename to components/pages/reports/FieldAddForm.module.css diff --git a/components/pages/reports/FieldAggregateForm.js b/components/pages/reports/FieldAggregateForm.js index cdcbdacc..abd1dbd9 100644 --- a/components/pages/reports/FieldAggregateForm.js +++ b/components/pages/reports/FieldAggregateForm.js @@ -19,6 +19,10 @@ export default function FieldAggregateForm({ name, type, onSelect }) { { label: formatMessage(labels.total), value: 'total' }, { label: formatMessage(labels.unique), value: 'unique' }, ], + uuid: [ + { label: formatMessage(labels.total), value: 'total' }, + { label: formatMessage(labels.unique), value: 'unique' }, + ], }; const items = options[type]; diff --git a/components/pages/reports/FieldSelectForm.js b/components/pages/reports/FieldSelectForm.js index 1ff6412a..0e41ea1f 100644 --- a/components/pages/reports/FieldSelectForm.js +++ b/components/pages/reports/FieldSelectForm.js @@ -9,10 +9,10 @@ export default function FieldSelectForm({ fields, onSelect }) {
onSelect(fields[key])}> - {fields.map(({ name, type }, index) => { + {fields.map(({ label, name, type }, index) => { return ( -
{name}
+
{label || name}
{type}
); diff --git a/components/pages/reports/ReportTemplates.js b/components/pages/reports/ReportTemplates.js index 35ba6f01..c1e0acdf 100644 --- a/components/pages/reports/ReportTemplates.js +++ b/components/pages/reports/ReportTemplates.js @@ -3,20 +3,10 @@ import { Button, Icons, Text, Icon } from 'react-basics'; import Page from 'components/layout/Page'; import PageHeader from 'components/layout/PageHeader'; import Funnel from 'assets/funnel.svg'; -import Nodes from 'assets/nodes.svg'; import Lightbulb from 'assets/lightbulb.svg'; import styles from './ReportTemplates.module.css'; import { useMessages } from 'hooks'; -const reports = [ - { - title: 'Funnel', - description: 'Understand the conversion and drop-off rate of users.', - url: '/reports/funnel', - icon: , - }, -]; - function ReportItem({ title, description, url, icon }) { return (
@@ -42,6 +32,21 @@ function ReportItem({ title, description, url, icon }) { export function ReportTemplates() { const { formatMessage, labels } = useMessages(); + const reports = [ + { + title: formatMessage(labels.insights), + description: 'Dive deeper into your data by using segments and filters.', + url: '/reports/insights', + icon: , + }, + { + title: formatMessage(labels.funnel), + description: 'Understand the conversion and drop-off rate of users.', + url: '/reports/funnel', + icon: , + }, + ]; + return ( diff --git a/components/pages/reports/event-data/EventDataParameters.js b/components/pages/reports/event-data/EventDataParameters.js index 09358be2..8d4dbb62 100644 --- a/components/pages/reports/event-data/EventDataParameters.js +++ b/components/pages/reports/event-data/EventDataParameters.js @@ -5,7 +5,7 @@ import { ReportContext } from 'components/pages/reports/Report'; import Empty from 'components/common/Empty'; import { DATA_TYPES, REPORT_PARAMETERS } from 'lib/constants'; import Icons from 'components/icons'; -import FieldAddForm from './FieldAddForm'; +import FieldAddForm from '../FieldAddForm'; import BaseParameters from '../BaseParameters'; import ParameterList from '../ParameterList'; import styles from './EventDataParameters.module.css'; @@ -54,9 +54,11 @@ export function EventDataParameters() { }; const handleAdd = (group, value) => { - const data = parameterData[group].filter(({ name }) => name !== value.name); + const data = parameterData[group]; - updateReport({ parameters: { [group]: data.concat(value) } }); + if (!data.find(({ name }) => name === value.name)) { + updateReport({ parameters: { [group]: data.concat(value) } }); + } }; const handleRemove = (group, index) => { diff --git a/components/pages/reports/insights/FieldAddForm.js b/components/pages/reports/insights/FieldAddForm.js deleted file mode 100644 index c95fcac3..00000000 --- a/components/pages/reports/insights/FieldAddForm.js +++ /dev/null @@ -1,44 +0,0 @@ -import { useState } from 'react'; -import { createPortal } from 'react-dom'; -import { REPORT_PARAMETERS } from 'lib/constants'; -import PopupForm from '../PopupForm'; -import FieldSelectForm from '../FieldSelectForm'; -import FieldAggregateForm from '../FieldAggregateForm'; -import FieldFilterForm from '../FieldFilterForm'; -import styles from './FieldAddForm.module.css'; - -export function FieldAddForm({ fields = [], group, element, onAdd, onClose }) { - const [selected, setSelected] = useState(); - - const handleSelect = value => { - const { type } = value; - - if (group === REPORT_PARAMETERS.groups || type === 'array' || type === 'boolean') { - value.value = group === REPORT_PARAMETERS.groups ? '' : 'total'; - handleSave(value); - return; - } - - setSelected(value); - }; - - const handleSave = value => { - onAdd(group, value); - onClose(); - }; - - return createPortal( - - {!selected && } - {selected && group === REPORT_PARAMETERS.fields && ( - - )} - {selected && group === REPORT_PARAMETERS.filters && ( - - )} - , - document.body, - ); -} - -export default FieldAddForm; diff --git a/components/pages/reports/insights/FieldAddForm.module.css b/components/pages/reports/insights/FieldAddForm.module.css deleted file mode 100644 index 5c5aaa4f..00000000 --- a/components/pages/reports/insights/FieldAddForm.module.css +++ /dev/null @@ -1,38 +0,0 @@ -.menu { - width: 360px; - max-height: 300px; - overflow: auto; -} - -.item { - display: flex; - flex-direction: row; - justify-content: space-between; - border-radius: var(--border-radius); -} - -.item:hover { - background: var(--base75); -} - -.type { - color: var(--font-color300); -} - -.selected { - font-weight: bold; -} - -.popup { - display: flex; -} - -.filter { - display: flex; - flex-direction: column; - gap: 20px; -} - -.dropdown { - min-width: 60px; -} diff --git a/components/pages/reports/insights/InsightsParameters.js b/components/pages/reports/insights/InsightsParameters.js index 39bfc2e8..b87a566d 100644 --- a/components/pages/reports/insights/InsightsParameters.js +++ b/components/pages/reports/insights/InsightsParameters.js @@ -1,42 +1,22 @@ import { useContext, useRef } from 'react'; -import { useApi, useMessages } from 'hooks'; +import { useMessages } from 'hooks'; import { Form, FormRow, FormButtons, SubmitButton, PopupTrigger, Icon, Popup } from 'react-basics'; import { ReportContext } from 'components/pages/reports/Report'; -import Empty from 'components/common/Empty'; -import { DATA_TYPES, REPORT_PARAMETERS } from 'lib/constants'; +import { REPORT_PARAMETERS, WEBSITE_EVENT_FIELDS } from 'lib/constants'; import Icons from 'components/icons'; -import FieldAddForm from './FieldAddForm'; import BaseParameters from '../BaseParameters'; +import FieldAddForm from '../FieldAddForm'; import ParameterList from '../ParameterList'; import styles from './InsightsParameters.module.css'; -function useFields(websiteId, startDate, endDate) { - const { get, useQuery } = useApi(); - const { data, error, isLoading } = useQuery( - ['fields', websiteId, startDate, endDate], - () => - get('/reports/event-data', { - websiteId, - startAt: +startDate, - endAt: +endDate, - }), - { enabled: !!(websiteId && startDate && endDate) }, - ); - - return { data, error, isLoading }; -} - export function InsightsParameters() { const { report, runReport, updateReport, isRunning } = useContext(ReportContext); - const { formatMessage, labels, messages } = useMessages(); + const { formatMessage, labels } = useMessages(); const ref = useRef(null); const { parameters } = report || {}; const { websiteId, dateRange, fields, filters, groups } = parameters || {}; - const { startDate, endDate } = dateRange || {}; const queryEnabled = websiteId && dateRange && fields?.length; - const { data, error } = useFields(websiteId, startDate, endDate); - const parametersSelected = websiteId && startDate && endDate; - const hasData = data?.length !== 0; + const fieldOptions = Object.keys(WEBSITE_EVENT_FIELDS).map(key => WEBSITE_EVENT_FIELDS[key]); const parameterGroups = [ { label: formatMessage(labels.fields), group: REPORT_PARAMETERS.fields }, @@ -78,10 +58,7 @@ export function InsightsParameters() { {(close, element) => { return ( ({ - name: eventKey, - type: DATA_TYPES[InsightsType], - }))} + fields={fieldOptions} group={group} element={element} onAdd={handleAdd} @@ -95,50 +72,43 @@ export function InsightsParameters() { }; return ( - + - {!hasData && } - {parametersSelected && - hasData && - parameterGroups.map(({ label, group }) => { - return ( - } + {parameterGroups.map(({ label, group }) => { + return ( + }> + handleRemove(group, index)} > - handleRemove(group, index)} - > - {({ name, value }) => { - return ( -
- {group === REPORT_PARAMETERS.fields && ( - <> -
{name}
-
{value}
- - )} - {group === REPORT_PARAMETERS.filters && ( - <> -
{name}
-
{value[0]}
-
{value[1]}
- - )} - {group === REPORT_PARAMETERS.groups && ( - <> -
{name}
- - )} -
- ); - }} -
-
- ); - })} + {({ name, value }) => { + return ( +
+ {group === REPORT_PARAMETERS.fields && ( + <> +
{name}
+
{value}
+ + )} + {group === REPORT_PARAMETERS.filters && ( + <> +
{name}
+
{value[0]}
+
{value[1]}
+ + )} + {group === REPORT_PARAMETERS.groups && ( + <> +
{name}
+ + )} +
+ ); + }} + +
+ ); + })} {formatMessage(labels.runQuery)} diff --git a/components/pages/websites/WebsiteChart.js b/components/pages/websites/WebsiteChart.js index 12b8ab4b..fac0fb37 100644 --- a/components/pages/websites/WebsiteChart.js +++ b/components/pages/websites/WebsiteChart.js @@ -1,7 +1,7 @@ import { useMemo } from 'react'; import PageviewsChart from 'components/metrics/PageviewsChart'; import { useApi, useDateRange, useTimezone, usePageQuery } from 'hooks'; -import { getDateArray, getDateLength } from 'lib/date'; +import { getDateArray } from 'lib/date'; export function WebsiteChart({ websiteId }) { const [dateRange] = useDateRange(websiteId); @@ -43,17 +43,9 @@ export function WebsiteChart({ websiteId }) { }; } return { pageviews: [], sessions: [] }; - }, [data, startDate, endDate, unit, modified]); + }, [data, startDate, endDate, unit]); - return ( - - ); + return ; } export default WebsiteChart; diff --git a/components/pages/websites/WebsiteChartList.js b/components/pages/websites/WebsiteChartList.js index 42079a53..62b05a4d 100644 --- a/components/pages/websites/WebsiteChartList.js +++ b/components/pages/websites/WebsiteChartList.js @@ -41,7 +41,7 @@ export default function WebsiteChartList({ websites, showCharts, limit }) { - + {showCharts && }
) : null; })} diff --git a/components/pages/websites/WebsiteEventData.js b/components/pages/websites/WebsiteEventData.js index 7dc68d41..7f9a6829 100644 --- a/components/pages/websites/WebsiteEventData.js +++ b/components/pages/websites/WebsiteEventData.js @@ -5,18 +5,18 @@ import { EventDataMetricsBar } from 'components/pages/event-data/EventDataMetric import { useDateRange, useApi, usePageQuery } from 'hooks'; import styles from './WebsiteEventData.module.css'; -function useFields(websiteId, field) { +function useData(websiteId, event) { const [dateRange] = useDateRange(websiteId); const { startDate, endDate } = dateRange; const { get, useQuery } = useApi(); const { data, error, isLoading } = useQuery( - ['event-data:fields', { websiteId, startDate, endDate, field }], + ['event-data:events', { websiteId, startDate, endDate, event }], () => - get('/event-data/fields', { + get('/event-data/events', { websiteId, startAt: +startDate, endAt: +endDate, - field, + event, }), { enabled: !!(websiteId && startDate && endDate) }, ); @@ -26,15 +26,15 @@ function useFields(websiteId, field) { export default function WebsiteEventData({ websiteId }) { const { - query: { view }, + query: { event }, } = usePageQuery(); - const { data } = useFields(websiteId, view); + const { data } = useData(websiteId, event); return ( - {!view && } - {view && } + {!event && } + {event && } ); } diff --git a/components/pages/websites/WebsiteHeader.js b/components/pages/websites/WebsiteHeader.js index 76f4e4f7..f7db6431 100644 --- a/components/pages/websites/WebsiteHeader.js +++ b/components/pages/websites/WebsiteHeader.js @@ -42,9 +42,9 @@ export function WebsiteHeader({ websiteId, showLinks = true, children }) { {name} + - {showLinks && ( {links.map(({ label, icon, path }) => { diff --git a/db/clickhouse/schema.sql b/db/clickhouse/schema.sql index a33db3c4..94b560c3 100644 --- a/db/clickhouse/schema.sql +++ b/db/clickhouse/schema.sql @@ -6,7 +6,7 @@ CREATE TABLE umami.website_event website_id UUID, session_id UUID, event_id UUID, - --session + --sessions hostname LowCardinality(String), browser LowCardinality(String), os LowCardinality(String), @@ -17,14 +17,14 @@ CREATE TABLE umami.website_event subdivision1 LowCardinality(String), subdivision2 LowCardinality(String), city String, - --pageview + --pageviews url_path String, url_query String, referrer_path String, referrer_query String, referrer_domain String, page_title String, - --event + --events event_type UInt32, event_name String, created_at DateTime('UTC'), @@ -38,7 +38,7 @@ CREATE TABLE umami.website_event_queue ( website_id UUID, session_id UUID, event_id UUID, - --session + --sessions hostname LowCardinality(String), browser LowCardinality(String), os LowCardinality(String), @@ -49,14 +49,14 @@ CREATE TABLE umami.website_event_queue ( subdivision1 LowCardinality(String), subdivision2 LowCardinality(String), city String, - --pageview + --pageviews url_path String, url_query String, referrer_path String, referrer_query String, referrer_domain String, page_title String, - --event + --events event_type UInt32, event_name String, created_at DateTime('UTC'), @@ -66,11 +66,11 @@ CREATE TABLE umami.website_event_queue ( ) ENGINE = Kafka SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input broker list - kafka_topic_list = 'event', + kafka_topic_list = 'events', kafka_group_name = 'event_consumer_group', kafka_format = 'JSONEachRow', kafka_max_block_size = 1048576, - kafka_handle_error_mode = 'stream' + kafka_handle_error_mode = 'stream'; CREATE MATERIALIZED VIEW umami.website_event_queue_mv TO umami.website_event AS SELECT website_id, @@ -108,7 +108,7 @@ SETTINGS index_granularity = 8192 AS SELECT _error AS error, _raw_message AS raw FROM umami.website_event_queue -WHERE length(_error) > 0 +WHERE length(_error) > 0; CREATE TABLE umami.event_data ( @@ -151,7 +151,7 @@ SETTINGS kafka_broker_list = 'domain:9092,domain:9093,domain:9094', -- input bro kafka_group_name = 'event_data_consumer_group', kafka_format = 'JSONEachRow', kafka_max_block_size = 1048576, - kafka_handle_error_mode = 'stream' + kafka_handle_error_mode = 'stream'; CREATE MATERIALIZED VIEW umami.event_data_queue_mv TO umami.event_data AS SELECT website_id, @@ -178,4 +178,4 @@ SETTINGS index_granularity = 8192 AS SELECT _error AS error, _raw_message AS raw FROM umami.event_data_queue -WHERE length(_error) > 0 \ No newline at end of file +WHERE length(_error) > 0; \ No newline at end of file diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 98ee8ae0..a25405df 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -97,8 +97,8 @@ model WebsiteEvent { model EventData { id String @id() @map("event_data_id") @db.VarChar(36) - websiteEventId String @map("website_event_id") @db.VarChar(36) websiteId String @map("website_id") @db.VarChar(36) + websiteEventId String @map("website_event_id") @db.VarChar(36) eventKey String @map("event_key") @db.VarChar(500) stringValue String? @map("string_value") @db.VarChar(500) numberValue Decimal? @map("number_value") @db.Decimal(19, 4) diff --git a/hooks/useDateRange.js b/hooks/useDateRange.js index 17552805..1e1b0616 100644 --- a/hooks/useDateRange.js +++ b/hooks/useDateRange.js @@ -1,20 +1,43 @@ -import { parseDateRange } from 'lib/date'; +import { getMinimumUnit, parseDateRange } from 'lib/date'; import { setItem } from 'next-basics'; import { DATE_RANGE_CONFIG, DEFAULT_DATE_RANGE } from 'lib/constants'; import useLocale from './useLocale'; import websiteStore, { setWebsiteDateRange } from 'store/websites'; import appStore, { setDateRange } from 'store/app'; +import useApi from './useApi'; export function useDateRange(websiteId) { + const { get } = useApi(); const { locale } = useLocale(); const websiteConfig = websiteStore(state => state[websiteId]?.dateRange); const defaultConfig = DEFAULT_DATE_RANGE; const globalConfig = appStore(state => state.dateRange); const dateRange = parseDateRange(websiteConfig || globalConfig || defaultConfig, locale); - const saveDateRange = value => { + const saveDateRange = async value => { if (websiteId) { - setWebsiteDateRange(websiteId, value); + let dateRange = value; + + if (typeof value === 'string') { + if (value === 'all') { + const result = await get(`/websites/${websiteId}/daterange`); + const { mindate, maxdate } = result; + + const startDate = new Date(mindate); + const endDate = new Date(maxdate); + + dateRange = { + startDate, + endDate, + unit: getMinimumUnit(startDate, endDate), + value, + }; + } else { + dateRange = parseDateRange(value, locale); + } + } + + setWebsiteDateRange(websiteId, dateRange); } else { setItem(DATE_RANGE_CONFIG, value); setDateRange(value); diff --git a/hooks/useFilters.js b/hooks/useFilters.js index ae01aadb..51268382 100644 --- a/hooks/useFilters.js +++ b/hooks/useFilters.js @@ -24,6 +24,7 @@ export function useFilters() { boolean: ['t', 'f'], number: ['eq', 'neq', 'gt', 'lt', 'gte', 'lte'], date: ['be', 'af'], + uuid: ['eq'], }; return { filters, types }; diff --git a/lang/am-ET.json b/lang/am-ET.json index 66e0bc6f..9ae8ab4e 100644 --- a/lang/am-ET.json +++ b/lang/am-ET.json @@ -42,6 +42,7 @@ "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Enable share URL", + "label.event": "Event", "label.event-data": "Event Data", "label.events": "Events", "label.field": "Field", diff --git a/lang/ar-SA.json b/lang/ar-SA.json index 0e7408b3..0919b203 100644 --- a/lang/ar-SA.json +++ b/lang/ar-SA.json @@ -42,6 +42,7 @@ "label.edit": "تعديل", "label.edit-dashboard": "تعديل لوحة التحكم", "label.enable-share-url": "تفعيل مشاركة الرابط", + "label.event": "Event", "label.event-data": "Event data", "label.events": "الأحداث", "label.field": "Field", diff --git a/lang/be-BY.json b/lang/be-BY.json index 13f40a0e..05625d77 100644 --- a/lang/be-BY.json +++ b/lang/be-BY.json @@ -42,6 +42,7 @@ "label.edit": "Змяніць", "label.edit-dashboard": "Змяніць інфармацыйную панэль", "label.enable-share-url": "Дазволіць дзяліцца спасылкай", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Падзеі", "label.field": "Field", diff --git a/lang/bn-BD.json b/lang/bn-BD.json index d955cfc6..e269dcae 100644 --- a/lang/bn-BD.json +++ b/lang/bn-BD.json @@ -42,6 +42,7 @@ "label.edit": "সম্পাদনা করুন", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "শেয়ার ইউআরএল শেয়ার করুন", + "label.event": "Event", "label.event-data": "Event data", "label.events": "ঘটনা", "label.field": "Field", diff --git a/lang/ca-ES.json b/lang/ca-ES.json index 441ce6fb..ab978a0e 100644 --- a/lang/ca-ES.json +++ b/lang/ca-ES.json @@ -42,6 +42,7 @@ "label.edit": "Edita", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Activa l'enllaç per compartir", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Esdeveniments", "label.field": "Field", diff --git a/lang/cs-CZ.json b/lang/cs-CZ.json index 21872685..34f1aade 100644 --- a/lang/cs-CZ.json +++ b/lang/cs-CZ.json @@ -42,6 +42,7 @@ "label.edit": "Upravit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Povolit sdílení URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Události", "label.field": "Field", diff --git a/lang/da-DK.json b/lang/da-DK.json index f64145dc..243b675f 100644 --- a/lang/da-DK.json +++ b/lang/da-DK.json @@ -42,6 +42,7 @@ "label.edit": "Rediger", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktivér delings-URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Hændelser", "label.field": "Field", diff --git a/lang/de-CH.json b/lang/de-CH.json index 69864ce9..c42289a5 100644 --- a/lang/de-CH.json +++ b/lang/de-CH.json @@ -42,6 +42,7 @@ "label.edit": "Bearbeite", "label.edit-dashboard": "Dashboard bearbeite", "label.enable-share-url": "Freigab-URL aktiviere", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Ereigniss", "label.field": "Field", diff --git a/lang/de-DE.json b/lang/de-DE.json index 6c65a09e..fd9b4f5d 100644 --- a/lang/de-DE.json +++ b/lang/de-DE.json @@ -42,7 +42,8 @@ "label.edit": "Bearbeiten", "label.edit-dashboard": "Dashboard bearbeiten", "label.enable-share-url": "Freigabe-URL aktivieren", - "label.event-data": "Event Daten", + "label.event": "Event", + "label.event-data": "Event daten", "label.events": "Ereignisse", "label.field": "Field", "label.fields": "Fields", diff --git a/lang/el-GR.json b/lang/el-GR.json index 1e27fedf..960f8a0d 100644 --- a/lang/el-GR.json +++ b/lang/el-GR.json @@ -42,6 +42,7 @@ "label.edit": "Επεξεργασία", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Ενεργοποίηση κοινής χρήσης URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Γεγονότα", "label.field": "Field", diff --git a/lang/en-GB.json b/lang/en-GB.json index 77f83a92..8a76cd9e 100644 --- a/lang/en-GB.json +++ b/lang/en-GB.json @@ -42,6 +42,7 @@ "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Enable share URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Events", "label.field": "Field", diff --git a/lang/en-US.json b/lang/en-US.json index b651e8a3..79f895ce 100644 --- a/lang/en-US.json +++ b/lang/en-US.json @@ -42,6 +42,7 @@ "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Enable share URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Events", "label.field": "Field", diff --git a/lang/es-ES.json b/lang/es-ES.json new file mode 100644 index 00000000..a9a81095 --- /dev/null +++ b/lang/es-ES.json @@ -0,0 +1,192 @@ +{ + "label.access-code": "Código de acceso", + "label.actions": "Acciones", + "label.activity-log": "Registro de actividad", + "label.add": "Añadir", + "label.add-description": "Añadir descripción", + "label.add-website": "Nuevo sitio web", + "label.admin": "Administrador", + "label.all": "Todos", + "label.all-time": "Todos los tiempos", + "label.analytics": "Analíticas", + "label.average-visit-time": "Tiempo promedio de visita", + "label.back": "Atrás", + "label.bounce-rate": "Porcentaje de rebote", + "label.browsers": "Navegadores", + "label.cancel": "Cancelar", + "label.change-password": "Cambiar contraseña", + "label.cities": "Ciudades", + "label.clear-all": "Limpiar todo", + "label.confirm": "Confirmar", + "label.confirm-password": "Confirmar contraseña", + "label.continue": "Continuar", + "label.countries": "Países", + "label.create-team": "Crear equipo", + "label.create-user": "Crear usuario", + "label.created": "Creado", + "label.current-password": "Contraseña actual", + "label.custom-range": "Intervalo personalizado", + "label.dashboard": "Panel de control", + "label.data": "Datos", + "label.date-range": "Intervalo de fechas", + "label.default-date-range": "Intervalo por defecto", + "label.delete": "Eliminar", + "label.delete-team": "Eliminar equipo", + "label.delete-user": "Eliminar usuario", + "label.delete-website": "Eliminar sitio", + "label.desktop": "Escritorio", + "label.details": "Detalles", + "label.devices": "Dispositivos", + "label.dismiss": "Ignorar", + "label.domain": "Dominio", + "label.edit": "Editar", + "label.edit-dashboard": "Editar panel", + "label.enable-share-url": "Habilitar compartir URL", + "label.event": "Evento", + "label.event-data": "Datos de evento", + "label.events": "Eventos", + "label.field": "Campo", + "label.fields": "Campos", + "label.filter-combined": "Combinado", + "label.filter-raw": "En crudo", + "label.funnel": "Funnel", + "label.join": "Unir", + "label.join-team": "Unirse al equipo", + "label.language": "Idioma", + "label.languages": "Idiomas", + "label.laptop": "Portátil", + "label.last-days": "Últimos {x} días", + "label.last-hours": "Últimas {x} horas", + "label.leave": "Abandonar", + "label.leave-team": "Abandonar equipo", + "label.login": "Iniciar sesión", + "label.logout": "Cerrar sesión", + "label.members": "Miembros", + "label.mobile": "Móvil", + "label.more": "Más", + "label.name": "Nombre", + "label.new-password": "Nueva contraseña", + "label.none": "Ninguno", + "label.operating-systems": "Sistemas operativos", + "label.owner": "Propietario", + "label.page-views": "Vistas", + "label.pages": "Páginas", + "label.password": "Contraseña", + "label.powered-by": "Con la ayuda de {name}", + "label.profile": "Perfil", + "label.queries": "Consultas", + "label.query": "Query", + "label.query-parameters": "Parámetros de petición", + "label.realtime": "Tiempo real", + "label.referrers": "Referido desde", + "label.refresh": "Actualizar", + "label.regenerate": "Regenerar", + "label.regions": "Regiones", + "label.remove": "Quitar", + "label.reports": "Reportes", + "label.required": "Obligatorio", + "label.reset": "Reiniciar", + "label.reset-website": "Reiniciar estadísticas", + "label.role": "Rol", + "label.run-query": "Ejecutar consulta", + "label.save": "Guardar", + "label.screens": "Pantallas", + "label.select-date": "Seleccionar fecha", + "label.select-website": "Seleccionar sitio web", + "label.sessions": "Sesiones", + "label.settings": "Configuraciones", + "label.share-url": "Compartir URL", + "label.single-day": "Un solo día", + "label.tablet": "Tableta", + "label.team": "Equipo", + "label.team-guest": "Invitado al equipo", + "label.team-id": "ID de equipo", + "label.team-member": "Miembro del equipo", + "label.team-owner": "Admin. del equipo", + "label.teams": "Equipos", + "label.theme": "Tema", + "label.this-month": "Este mes", + "label.this-week": "Esta semana", + "label.this-year": "Este año", + "label.timezone": "Zona horaria", + "label.title": "Título", + "label.today": "Hoy", + "label.toggle-charts": "Alternar gráficas", + "label.tracking-code": "Código de rastreo", + "label.unique-visitors": "Visitantes únicos", + "label.unknown": "Desconocida", + "label.url": "URL", + "label.urls": "URLs", + "label.user": "Usuario", + "label.username": "Nombre de usuario", + "label.users": "Usuarios", + "label.view": "Visualizar", + "label.view-details": "Ver detalles", + "label.view-only": "Ver sólo", + "label.views": "Vistas", + "label.visitors": "Visitantes", + "label.website": "Sitio web", + "label.website-id": "ID del sitio web", + "label.websites": "Sitios web", + "label.window": "Ventana", + "label.yesterday": "Ayer", + "labels.after": "Después", + "labels.average": "Media", + "labels.before": "Antes", + "labels.breakdown": "Desglose", + "labels.contains": "Contiene", + "labels.create-report": "Crear reporte", + "labels.description": "Descripciones", + "labels.does-not-contain": "No contiene", + "labels.does-not-equal": "No es igual a", + "labels.equals": "Es igual a", + "labels.false": "False", + "labels.filters": "Filtros", + "labels.greater-than": "Mayor que", + "labels.greater-than-equals": "Mayor que o igual a", + "labels.less-than": "Menor que", + "labels.less-than-equals": "Menor que o igual a", + "labels.max": "Máx", + "labels.min": "Mín", + "labels.overview": "Resumen", + "labels.sum": "Suma", + "labels.total": "Total", + "labels.total-records": "Total de registros", + "labels.true": "Verdadero", + "labels.type": "Tipo", + "labels.unique": "Único", + "labels.untitled": "Sin título", + "labels.value": "Valor", + "message.active-users": "{x} {x, plural, one {activo} other {activos}}", + "message.confirm-delete": "¿Seguro que quieres eliminar {target}?", + "message.confirm-leave": "¿Seguro que quieres abandonar {target}?", + "message.confirm-reset": "¿Seguro que quieres BORRAR las analíticas de {target}?", + "message.delete-account": "Para borrar esta cuenta, escribe {confirmation} a continuación para confirmar.", + "message.delete-website": "Para borrar este sitio web, escribe {confirmation} a continuación para confirmar.", + "message.delete-website-warning": "Toda la información relacionada será eliminada.", + "message.error": "Algo falló.", + "message.event-log": "{event} en {url}", + "message.go-to-settings": "Ir a la configuración", + "message.incorrect-username-password": "Nombre de usuario o contraseña incorrectos.", + "message.invalid-domain": "Dominio inválido", + "message.min-password-length": "Longitud mínima de {n} caracteres", + "message.no-data-available": "No hay información disponible.", + "message.no-event-data": "No hay datos de eventos disponibles.", + "message.no-match-password": "Las contraseñas no coinciden", + "message.no-teams": "No has creado ningún equipo.", + "message.no-users": "No hay usuarios.", + "message.page-not-found": "Página no encontrada", + "message.reset-website": "Para reiniciar este sitio web, escribe {confirmation} a continuación para confirmar.", + "message.reset-website-warning": "Todas las estadísticas de esta página serán eliminadas, pero el código de rastreo permanecerá intacto.", + "message.saved": "Guardado.", + "message.share-url": "Esta es la URL pública para {target}.", + "message.team-already-member": "Ya eres miembro de este equipo.", + "message.team-not-found": "Equipo no encontrado.", + "message.tracking-code": "Código de rastreo", + "message.user-deleted": "Usuario eliminado.", + "message.visitor-log": "Visitante desde {country} usando {browser} en {os} {device}", + "messages.no-results-found": "No se encontraron resultados.", + "messages.no-team-websites": "Este equipo no tiene ningún sitio web configurado.", + "messages.no-websites-configured": "No tienes ningún sitio web configurado.", + "messages.team-websites-info": "Las analíticas de tus sitios web pueden ser vistas por cualquier miembro del equipo." +} diff --git a/lang/es-MX.json b/lang/es-MX.json index f1bbb06d..55336c1c 100644 --- a/lang/es-MX.json +++ b/lang/es-MX.json @@ -42,6 +42,7 @@ "label.edit": "Editar", "label.edit-dashboard": "Editar panel", "label.enable-share-url": "Habilitar compartir URL", + "label.event": "Evento", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", diff --git a/lang/fa-IR.json b/lang/fa-IR.json index c9053f4e..0ccd4cd7 100644 --- a/lang/fa-IR.json +++ b/lang/fa-IR.json @@ -42,6 +42,7 @@ "label.edit": "ویرایش", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "فعال کردن اشتراک گذاری URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "رویدادها", "label.field": "Field", diff --git a/lang/fi-FI.json b/lang/fi-FI.json index 90350eef..b1730d06 100644 --- a/lang/fi-FI.json +++ b/lang/fi-FI.json @@ -42,6 +42,7 @@ "label.edit": "Muokkaa", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Ota jakamisen URL-osoite käyttöön", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Tapahtumat", "label.field": "Field", diff --git a/lang/fo-FO.json b/lang/fo-FO.json index bddd5e9c..460b4b14 100644 --- a/lang/fo-FO.json +++ b/lang/fo-FO.json @@ -42,6 +42,7 @@ "label.edit": "Ger broyting", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Virkja deili leinki", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Hendingar/tiltøk", "label.field": "Field", diff --git a/lang/fr-FR.json b/lang/fr-FR.json index ff6de17b..3e3eeff9 100644 --- a/lang/fr-FR.json +++ b/lang/fr-FR.json @@ -2,8 +2,8 @@ "label.access-code": "Code d'accès", "label.actions": "Actions", "label.activity-log": "Journal d'activité", - "label.add": "Add", - "label.add-description": "Add description", + "label.add": "Ajouter", + "label.add-description": "Ajouter une description", "label.add-website": "Ajouter un site", "label.admin": "Administrateur", "label.all": "Tout", @@ -42,13 +42,14 @@ "label.edit": "Modifier", "label.edit-dashboard": "Modifier le tableau de bord", "label.enable-share-url": "Activer l'URL de partage", - "label.event-data": "Event data", + "label.event": "Event", + "label.event-data": "Données d'événements", "label.events": "Événements", - "label.field": "Field", - "label.fields": "Fields", + "label.field": "Champ", + "label.fields": "Champs", "label.filter-combined": "Combiné", "label.filter-raw": "Brut", - "label.funnel": "Funnel", + "label.funnel": "Entonnoir", "label.join": "Rejoindre", "label.join-team": "Rejoindre une équipe", "label.language": "Langue", @@ -73,24 +74,24 @@ "label.password": "Mot de passe", "label.powered-by": "Propulsé par {name}", "label.profile": "Profil", - "label.queries": "Queries", - "label.query": "Query", + "label.queries": "Requêtes", + "label.query": "Requête", "label.query-parameters": "Paramètres d'URL", "label.realtime": "Temps réel", - "label.referrers": "Sources", + "label.referrers": "Sites référents", "label.refresh": "Rafraîchir", "label.regenerate": "Régénérer", "label.regions": "Régions", "label.remove": "Retirer", - "label.reports": "Reports", + "label.reports": "Rapports", "label.required": "Requis", "label.reset": "Réinitialiser", "label.reset-website": "Réinitialiser les statistiques", "label.role": "Rôle", - "label.run-query": "Run query", + "label.run-query": "Éxécuter la requête", "label.save": "Enregistrer", "label.screens": "Résolutions d'écran", - "label.select-date": "Select date", + "label.select-date": "Choisir une période", "label.select-website": "Choisir un site", "label.sessions": "Sessions", "label.settings": "Paramètres", @@ -121,46 +122,46 @@ "label.users": "Utilisateurs", "label.view": "Voir", "label.view-details": "Voir les détails", - "label.view-only": "View only", + "label.view-only": "Consultation", "label.views": "Vues", "label.visitors": "Visiteurs", "label.website": "Website", "label.website-id": "ID de site", "label.websites": "Sites", - "label.window": "Window", + "label.window": "Fenêtre", "label.yesterday": "Hier", - "labels.after": "After", - "labels.average": "Average", - "labels.before": "Before", - "labels.breakdown": "Breakdown", - "labels.contains": "Contains", - "labels.create-report": "Create report", + "labels.after": "Après", + "labels.average": "Moyenne", + "labels.before": "Avant", + "labels.breakdown": "Répartition", + "labels.contains": "Contient", + "labels.create-report": "Créer un rapport", "labels.description": "Description", - "labels.does-not-contain": "Does not contain", - "labels.does-not-equal": "Does not equal", - "labels.equals": "Equals", - "labels.false": "False", - "labels.filters": "Filters", - "labels.greater-than": "Greater than", - "labels.greater-than-equals": "Greater than or equals", - "labels.less-than": "Less than", - "labels.less-than-equals": "Less than or equals", + "labels.does-not-contain": "Ne contient pas", + "labels.does-not-equal": "N'est pas égal", + "labels.equals": "Est égal", + "labels.false": "Faux", + "labels.filters": "Filtres", + "labels.greater-than": "Supérieur à", + "labels.greater-than-equals": "Supérieur ou égal à", + "labels.less-than": "Inférieur à", + "labels.less-than-equals": "Inférieur ou égal à", "labels.max": "Max", "labels.min": "Min", - "labels.overview": "Overview", - "labels.sum": "Sum", + "labels.overview": "Vue d'ensemble", + "labels.sum": "Somme", "labels.total": "Total", - "labels.total-records": "Total records", - "labels.true": "True", + "labels.total-records": "Nombre d'enregistrements", + "labels.true": "Vrai", "labels.type": "Type", "labels.unique": "Unique", - "labels.untitled": "Untitled", - "labels.value": "Value", + "labels.untitled": "Sans titre", + "labels.value": "Valeur", "message.active-users": "{x} {x, plural, one {visiteur} other {visiteurs}} actuellement", "message.confirm-delete": "Êtes-vous sûr de vouloir supprimer {target} ?", "message.confirm-leave": "Êtes-vous sûr de vouloir quitter {target} ?", "message.confirm-reset": "Êtes-vous sûr de vouloir réinitialiser les statistiques de {target} ?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", + "message.delete-account": "Pour supprimer ce compte, taper {confirmation} ci-dessous pour confirmer.", "message.delete-website": "Pour supprimer ce site, taper {confirmation} ci-dessous pour confirmer.", "message.delete-website-warning": "Toutes les données associées seront supprimées.", "message.error": "Un problème est survenu.", @@ -170,12 +171,12 @@ "message.invalid-domain": "Domaine invalide", "message.min-password-length": "Taille minimale de {n} caractères", "message.no-data-available": "Aucune donnée disponible.", - "message.no-event-data": "No event data is available.", + "message.no-event-data": "Aucune donnée d'événement disponible.", "message.no-match-password": "Les mots de passe ne correspondent pas", - "message.no-teams": "Vous n'avez créé aucune équipe.", - "message.no-users": "Il n'y aucun utilisateur.", + "message.no-teams": "Vous n'avez pas créé d'équipe.", + "message.no-users": "Aucun utilisateur.", "message.page-not-found": "Page non trouvée.", - "message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.", + "message.reset-website": "Pour réinitialiser ce site, taper {confirmation} ci-dessous pour confirmer.", "message.reset-website-warning": "Toutes les statistiques pour ce site seront supprimées, mais votre code de suivi restera intact.", "message.saved": "Enregistré avec succès.", "message.share-url": "Les statistiques de votre site sont accessibles publiquement sur cette URL :", @@ -184,8 +185,8 @@ "message.tracking-code": "Code de suivi", "message.user-deleted": "Utilisateur supprimé.", "message.visitor-log": "Visiteur de {country} utilisant {browser} sur {os} {device}", - "messages.no-results-found": "No results were found.", + "messages.no-results-found": "Aucun résultat n'a été trouvé.", "messages.no-team-websites": "Cette équipe n'a aucun site.", - "messages.no-websites-configured": "Vous n'avez configuré aucun site.", + "messages.no-websites-configured": "Vous n'avez pas configuré de site.", "messages.team-websites-info": "Les sites peuvent être vus par tout utilisateur dans l'équipe." } diff --git a/lang/ga-ES.json b/lang/ga-ES.json index a811df48..55d74827 100644 --- a/lang/ga-ES.json +++ b/lang/ga-ES.json @@ -42,6 +42,7 @@ "label.edit": "Editar", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Activar URL de compartición", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", diff --git a/lang/he-IL.json b/lang/he-IL.json index ddc1a869..95e5eb44 100644 --- a/lang/he-IL.json +++ b/lang/he-IL.json @@ -42,6 +42,7 @@ "label.edit": "עריכה", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "הפעלת URL שיתוף", + "label.event": "Event", "label.event-data": "Event data", "label.events": "אירועים", "label.field": "Field", diff --git a/lang/hi-IN.json b/lang/hi-IN.json index d203ac62..bf883529 100644 --- a/lang/hi-IN.json +++ b/lang/hi-IN.json @@ -42,6 +42,7 @@ "label.edit": "संपादित करें", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "शेयर URL सक्षम करें", + "label.event": "Event", "label.event-data": "Event data", "label.events": "स्पर्धाएँ", "label.field": "Field", diff --git a/lang/hr-HR.json b/lang/hr-HR.json index f4163746..6ee7dca0 100644 --- a/lang/hr-HR.json +++ b/lang/hr-HR.json @@ -42,6 +42,7 @@ "label.edit": "Uredi", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Omogući dijeljenje poveznice", + "label.event": "Event", "label.event-data": "Podaci događaja", "label.events": "Events", "label.field": "Field", diff --git a/lang/hu-HU.json b/lang/hu-HU.json index 064ae981..4594e1ce 100644 --- a/lang/hu-HU.json +++ b/lang/hu-HU.json @@ -42,6 +42,7 @@ "label.edit": "Módosítás", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "URL-megosztás engedélyezése", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Események", "label.field": "Field", diff --git a/lang/id-ID.json b/lang/id-ID.json index bcb24eb0..d58761b3 100644 --- a/lang/id-ID.json +++ b/lang/id-ID.json @@ -42,6 +42,7 @@ "label.edit": "Sunting", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktifkan URL berbagi", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Perihal", "label.field": "Field", diff --git a/lang/it-IT.json b/lang/it-IT.json index 8c4591bc..5423dc37 100644 --- a/lang/it-IT.json +++ b/lang/it-IT.json @@ -42,6 +42,7 @@ "label.edit": "Modifica", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Abilita URL di condivisione", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Eventi", "label.field": "Field", diff --git a/lang/ja-JP.json b/lang/ja-JP.json index 07a68a9e..6246c252 100644 --- a/lang/ja-JP.json +++ b/lang/ja-JP.json @@ -42,6 +42,7 @@ "label.edit": "編集", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "共有リンクを有効にする", + "label.event": "Event", "label.event-data": "Event data", "label.events": "イベント", "label.field": "Field", diff --git a/lang/km-KH.json b/lang/km-KH.json index c2d4920d..9fa334f8 100644 --- a/lang/km-KH.json +++ b/lang/km-KH.json @@ -42,6 +42,7 @@ "label.edit": "កែប្រែ", "label.edit-dashboard": "កែផ្ទាំងគ្រប់គ្រង", "label.enable-share-url": "បើកការចែករំលែក URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "ព្រឹត្តិការណ៍", "label.field": "Field", diff --git a/lang/ko-KR.json b/lang/ko-KR.json index 21fe7350..4579456d 100644 --- a/lang/ko-KR.json +++ b/lang/ko-KR.json @@ -42,6 +42,7 @@ "label.edit": "편집", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "URL 공유 활성화", + "label.event": "Event", "label.event-data": "Event data", "label.events": "이벤트", "label.field": "Field", diff --git a/lang/lt-LT.json b/lang/lt-LT.json index e951bcd3..5901e3cd 100644 --- a/lang/lt-LT.json +++ b/lang/lt-LT.json @@ -42,6 +42,7 @@ "label.edit": "Redaguoti", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Įjungti bendrinimą su nuoroda", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Įvykiai", "label.field": "Field", diff --git a/lang/mn-MN.json b/lang/mn-MN.json index 100368e3..f2f0d04e 100644 --- a/lang/mn-MN.json +++ b/lang/mn-MN.json @@ -42,6 +42,7 @@ "label.edit": "Засах", "label.edit-dashboard": "Хянах самбар засах", "label.enable-share-url": "Хуваалцах холбоос идэвхжүүлэх", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Үйлдэл", "label.field": "Field", diff --git a/lang/ms-MY.json b/lang/ms-MY.json index 1fc9bce0..9b1e3c8c 100644 --- a/lang/ms-MY.json +++ b/lang/ms-MY.json @@ -42,6 +42,7 @@ "label.edit": "Edit", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktifkan url berkongsi", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Peristiwa", "label.field": "Field", diff --git a/lang/nb-NO.json b/lang/nb-NO.json index 1887096b..43a65d76 100644 --- a/lang/nb-NO.json +++ b/lang/nb-NO.json @@ -42,6 +42,7 @@ "label.edit": "Rediger", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Aktiver delings-URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Arrangementer", "label.field": "Field", diff --git a/lang/nl-NL.json b/lang/nl-NL.json index db5e4b7d..cc53545d 100644 --- a/lang/nl-NL.json +++ b/lang/nl-NL.json @@ -42,6 +42,7 @@ "label.edit": "Bewerken", "label.edit-dashboard": "Dashboard aanpassen", "label.enable-share-url": "Sta delen via openbare URL toe", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Gebeurtenissen", "label.field": "Field", diff --git a/lang/pl-PL.json b/lang/pl-PL.json index 38b808fc..55989b8c 100644 --- a/lang/pl-PL.json +++ b/lang/pl-PL.json @@ -2,7 +2,7 @@ "label.access-code": "Kod dostępu", "label.actions": "Działania", "label.activity-log": "Dziennik aktywności", - "label.add": "Add", + "label.add": "Dodaj", "label.add-description": "Add description", "label.add-website": "Dodaj witrynę", "label.admin": "Administrator", @@ -42,13 +42,14 @@ "label.edit": "Edytuj", "label.edit-dashboard": "Edytuj panel", "label.enable-share-url": "Włącz udostępnianie adresu URL", - "label.event-data": "Event data", + "label.event": "Event", + "label.event-data": "Dane zdarzenia", "label.events": "Zdarzenia", - "label.field": "Field", - "label.fields": "Fields", + "label.field": "Pole", + "label.fields": "Pola", "label.filter-combined": "Połączone", "label.filter-raw": "Surowe dane", - "label.funnel": "Funnel", + "label.funnel": "Lejek", "label.join": "Dołącz", "label.join-team": "Dołącz do zespołu", "label.language": "Język", @@ -74,7 +75,7 @@ "label.powered-by": "Obsługiwane przez {name}", "label.profile": "Profil", "label.queries": "Zapytania", - "label.query": "Query", + "label.query": "Zapytanie", "label.query-parameters": "Parametry query", "label.realtime": "Czas rzeczywisty", "label.referrers": "Źródła odsyłające", @@ -82,15 +83,15 @@ "label.regenerate": "Wygeneruj ponownie", "label.regions": "Regiony", "label.remove": "Usuń", - "label.reports": "Reports", + "label.reports": "Raporty", "label.required": "Wymagany", "label.reset": "Zresetuj", "label.reset-website": "Zresetuj statystyki", - "label.role": "Role", - "label.run-query": "Run query", + "label.role": "Rola", + "label.run-query": "Uruchom zapytanie", "label.save": "Zapisz", "label.screens": "Ekrany", - "label.select-date": "Select date", + "label.select-date": "Wybierz datę", "label.select-website": "Wybierz witrynę", "label.sessions": "Sesje", "label.settings": "Ustawienia", @@ -114,54 +115,54 @@ "label.tracking-code": "Kod śledzenia", "label.unique-visitors": "Unikalni odwiedzający", "label.unknown": "Nieznany", - "label.url": "URL", - "label.urls": "URLs", + "label.url": "Link", + "label.urls": "Linki", "label.user": "Użytkownik", "label.username": "Nazwa użytkownika", "label.users": "Użytkownicy", "label.view": "Zobacz", "label.view-details": "Pokaż szczegóły", - "label.view-only": "View only", + "label.view-only": "Wyświetl tylko", "label.views": "Wyświetlenia", "label.visitors": "Odwiedzający", - "label.website": "Website", + "label.website": "Witryna", "label.website-id": "ID witryny", "label.websites": "Witryny", - "label.window": "Window", + "label.window": "Okno", "label.yesterday": "Wczoraj", - "labels.after": "After", - "labels.average": "Average", - "labels.before": "Before", - "labels.breakdown": "Breakdown", - "labels.contains": "Contains", - "labels.create-report": "Create report", - "labels.description": "Description", - "labels.does-not-contain": "Does not contain", - "labels.does-not-equal": "Does not equal", - "labels.equals": "Equals", - "labels.false": "False", - "labels.filters": "Filters", - "labels.greater-than": "Greater than", - "labels.greater-than-equals": "Greater than or equals", - "labels.less-than": "Less than", - "labels.less-than-equals": "Less than or equals", + "labels.after": "Po", + "labels.average": "Średnia", + "labels.before": "Przed", + "labels.breakdown": "Podział", + "labels.contains": "Zawiera", + "labels.create-report": "Utwórz raport", + "labels.description": "Opis", + "labels.does-not-contain": "Nie zawiera", + "labels.does-not-equal": "Nie równa się", + "labels.equals": "Równa się", + "labels.false": "Fałsz", + "labels.filters": "Filtry", + "labels.greater-than": "Wiekszy niż", + "labels.greater-than-equals": "Większy lub równy", + "labels.less-than": "Mniejszy niż", + "labels.less-than-equals": "Mniejszy lub równy", "labels.max": "Max", "labels.min": "Min", - "labels.overview": "Overview", - "labels.sum": "Sum", - "labels.total": "Total", - "labels.total-records": "Total records", - "labels.true": "True", - "labels.type": "Type", - "labels.unique": "Unique", - "labels.untitled": "Untitled", - "labels.value": "Value", + "labels.overview": "Przegląd", + "labels.sum": "Suma", + "labels.total": "Łącznie", + "labels.total-records": "Łączna liczba rekordów", + "labels.true": "Prawda", + "labels.type": "Typ", + "labels.unique": "Unikalne", + "labels.untitled": "Bez tytułu", + "labels.value": "Wartość", "message.active-users": "{x} aktualnie {x, plural, one {odwiedzający} other {odwiedzających}}", "message.confirm-delete": "Czy na pewno chcesz usunąć {target}?", "message.confirm-leave": "Czy na pewno chcesz opuścić {target}?", "message.confirm-reset": "Czy na pewno chcesz zresetować statystyki {target}?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", - "message.delete-website": "To delete this website, type {confirmation} in the box below to confirm.", + "message.delete-account": "Aby usunąć to konto, wpisz {confirmation} w polu poniżej w celu potwierdzenia.", + "message.delete-website": "Aby usunąć tę stronę, wpisz {confirmation} w polu poniżej w celu potwierdzenia.", "message.delete-website-warning": "Wszystkie powiązane dane również zostaną usunięte.", "message.error": "Coś poszło nie tak.", "message.event-log": "{event} na {url}", @@ -170,7 +171,7 @@ "message.invalid-domain": "Nieprawidłowa witryna", "message.min-password-length": "Minimalna długość {n} znaków", "message.no-data-available": "Brak dostępnych danych.", - "message.no-event-data": "No event data is available.", + "message.no-event-data": "Dane dotyczące zdarzeń nie są dostępne.", "message.no-match-password": "Hasła się nie zgadzają", "message.no-teams": "Nie stworzyłeś żadnych zespołów.", "message.no-users": "Nie ma żadnych użytkowników.", @@ -184,7 +185,7 @@ "message.tracking-code": "Kod śledzenia", "message.user-deleted": "Użytkownik usunięty.", "message.visitor-log": "Odwiedzający z {country} używa {browser} na {os} {device}", - "messages.no-results-found": "No results were found.", + "messages.no-results-found": "Nie znaleziono żadnych wyników.", "messages.no-team-websites": "Ten zespół nie ma żadnych witryn internetowych.", "messages.no-websites-configured": "Nie masz skonfigurowanych żadnych witryn internetowych.", "messages.team-websites-info": "Strony internetowe mogą być przeglądane przez każdego członka zespołu." diff --git a/lang/pt-BR.json b/lang/pt-BR.json index 9a563acd..65bc973d 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -42,6 +42,7 @@ "label.edit": "Editar", "label.edit-dashboard": "Editar painel", "label.enable-share-url": "Ativar link de compartilhamento", + "label.event": "Evento", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", diff --git a/lang/pt-PT.json b/lang/pt-PT.json index 826b4dc5..4c98516c 100644 --- a/lang/pt-PT.json +++ b/lang/pt-PT.json @@ -42,6 +42,7 @@ "label.edit": "Editar", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Ativar link de partilha", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Eventos", "label.field": "Field", diff --git a/lang/ro-RO.json b/lang/ro-RO.json index d65fb08f..776a9af5 100644 --- a/lang/ro-RO.json +++ b/lang/ro-RO.json @@ -42,6 +42,7 @@ "label.edit": "Editare", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Activare adresă URL de distribuire", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Evenimente", "label.field": "Field", diff --git a/lang/ru-RU.json b/lang/ru-RU.json index eb56835a..3e005eec 100644 --- a/lang/ru-RU.json +++ b/lang/ru-RU.json @@ -42,6 +42,7 @@ "label.edit": "Изменить", "label.edit-dashboard": "Редактировать дашборд", "label.enable-share-url": "Разрешить делиться ссылкой", + "label.event": "Event", "label.event-data": "Event data", "label.events": "События", "label.field": "Field", diff --git a/lang/si-LK.json b/lang/si-LK.json index d23d008c..89f1c2e7 100644 --- a/lang/si-LK.json +++ b/lang/si-LK.json @@ -42,6 +42,7 @@ "label.edit": "සංස්කරණය කරන්න", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "බෙදාගැනීමේ URL සබල කරන්න", + "label.event": "Event", "label.event-data": "සිදුවීම් දත්ත", "label.events": "Events", "label.field": "Field", diff --git a/lang/sk-SK.json b/lang/sk-SK.json index 4c09565f..e23235e5 100644 --- a/lang/sk-SK.json +++ b/lang/sk-SK.json @@ -42,6 +42,7 @@ "label.edit": "Upraviť", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Povoliť zdielanie URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Udalosti", "label.field": "Field", diff --git a/lang/sl-SI.json b/lang/sl-SI.json index c991fb75..364d49eb 100644 --- a/lang/sl-SI.json +++ b/lang/sl-SI.json @@ -42,6 +42,7 @@ "label.edit": "Uredi", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Omogoči URL za skupno rabo", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Dogodki", "label.field": "Field", diff --git a/lang/sv-SE.json b/lang/sv-SE.json index 07d1a7fe..d0a4164f 100644 --- a/lang/sv-SE.json +++ b/lang/sv-SE.json @@ -42,6 +42,7 @@ "label.edit": "Redigera", "label.edit-dashboard": "Redigera översikt", "label.enable-share-url": "Aktivera delnings-URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Händelser", "label.field": "Field", diff --git a/lang/ta-IN.json b/lang/ta-IN.json index 99cc1c26..e8f1f1fc 100644 --- a/lang/ta-IN.json +++ b/lang/ta-IN.json @@ -42,6 +42,7 @@ "label.edit": "திருத்துதல்", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "கள முகவரியை பகிரலாம்", + "label.event": "Event", "label.event-data": "Event data", "label.events": "நிகழ்வுகள்", "label.field": "Field", diff --git a/lang/th-TH.json b/lang/th-TH.json index e0111a84..12003434 100644 --- a/lang/th-TH.json +++ b/lang/th-TH.json @@ -42,6 +42,7 @@ "label.edit": "แก้ไข", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "เปิดใช้งานการแชร์ลิงก์", + "label.event": "Event", "label.event-data": "Event data", "label.events": "เหตุการณ์", "label.field": "Field", diff --git a/lang/tr-TR.json b/lang/tr-TR.json index 686489ea..b3ab8eff 100644 --- a/lang/tr-TR.json +++ b/lang/tr-TR.json @@ -42,6 +42,7 @@ "label.edit": "Düzenle", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Anonim paylaşım URL'i aktif", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Olaylar", "label.field": "Field", diff --git a/lang/uk-UA.json b/lang/uk-UA.json index d116c7ef..a7359c54 100644 --- a/lang/uk-UA.json +++ b/lang/uk-UA.json @@ -42,6 +42,7 @@ "label.edit": "Редагувати", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Дозволити ділитися посиланням", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Події", "label.field": "Field", diff --git a/lang/ur-PK.json b/lang/ur-PK.json index e2f95fb3..8f53030f 100644 --- a/lang/ur-PK.json +++ b/lang/ur-PK.json @@ -42,6 +42,7 @@ "label.edit": "ترمیم", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "شیئر یو آر ایل کو فعال کریں", + "label.event": "Event", "label.event-data": "Event data", "label.events": "واقعات", "label.field": "Field", diff --git a/lang/vi-VN.json b/lang/vi-VN.json index ff89a601..7fdfced1 100644 --- a/lang/vi-VN.json +++ b/lang/vi-VN.json @@ -42,6 +42,7 @@ "label.edit": "Chỉnh sửa", "label.edit-dashboard": "Edit dashboard", "label.enable-share-url": "Bật khả năng chia sẻ URL", + "label.event": "Event", "label.event-data": "Event data", "label.events": "Sự kiện", "label.field": "Field", diff --git a/lang/zh-CN.json b/lang/zh-CN.json index 33eb5d85..fe63e006 100644 --- a/lang/zh-CN.json +++ b/lang/zh-CN.json @@ -2,8 +2,8 @@ "label.access-code": "访问代码", "label.actions": "用户行为", "label.activity-log": "活动日志", - "label.add": "Add", - "label.add-description": "Add description", + "label.add": "添加", + "label.add-description": "添加描述", "label.add-website": "添加网站", "label.admin": "管理员", "label.all": "所有", @@ -42,6 +42,7 @@ "label.edit": "编辑", "label.edit-dashboard": "编辑仪表板", "label.enable-share-url": "启用共享链接", + "label.event": "Event", "label.event-data": "Event data", "label.events": "行为类别", "label.field": "Field", @@ -127,15 +128,15 @@ "label.website": "Website", "label.website-id": "网站 ID", "label.websites": "网站", - "label.window": "Window", + "label.window": "窗口", "label.yesterday": "昨天", "labels.after": "After", "labels.average": "Average", "labels.before": "Before", "labels.breakdown": "Breakdown", "labels.contains": "Contains", - "labels.create-report": "Create report", - "labels.description": "Description", + "labels.create-report": "创建报告", + "labels.description": "描述", "labels.does-not-contain": "Does not contain", "labels.does-not-equal": "Does not equal", "labels.equals": "Equals", @@ -154,14 +155,14 @@ "labels.true": "True", "labels.type": "Type", "labels.unique": "Unique", - "labels.untitled": "Untitled", + "labels.untitled": "未命名", "labels.value": "Value", "message.active-users": "当前在线 {x} 人", "message.confirm-delete": "你确定要删除 {target} 吗?", "message.confirm-leave": "你确定要离开 {target} 吗?", "message.confirm-reset": "您确定要重置 {target} 的数据吗?", - "message.delete-account": "To delete this account, type {confirmation} in the box below to confirm.", - "message.delete-website": "To delete this website, type {confirmation} in the box below to confirm.", + "message.delete-account": "确定删除该账户, 请在下面的输入框中输入 {confirmation} 进行二次确认。", + "message.delete-website": "确定删除该网站, 请在下面的输入框中输入 {confirmation} 进行二次确认。", "message.delete-website-warning": "所有相关数据将会被删除。", "message.error": "出现错误。", "message.event-log": "{event} on {url}", @@ -175,7 +176,7 @@ "message.no-teams": "你还没有创建任何团队。", "message.no-users": "没有任何用户。", "message.page-not-found": "网页未找到。", - "message.reset-website": "To reset this website, type {confirmation} in the box below to confirm.", + "message.reset-website": "确定重置该网站, 请在下面的输入框中输入 {confirmation} 进行二次确认。", "message.reset-website-warning": "本网站的所有统计数据将被删除,但您的跟踪代码将保持不变。", "message.saved": "保存成功。", "message.share-url": "这是 {target} 的共享链接。", @@ -184,7 +185,7 @@ "message.tracking-code": "跟踪代码", "message.user-deleted": "User detected.", "message.visitor-log": "来自{country}的访客在搭载 {os} 的{device}上使用 {browser} 浏览器进行访问。", - "messages.no-results-found": "No results were found.", + "messages.no-results-found": "没有找到任何结果。", "messages.no-team-websites": "这个团队没有任何网站。", "messages.no-websites-configured": "你还没有设置任何网站。", "messages.team-websites-info": "团队中的任何人都可查看网站。" diff --git a/lang/zh-TW.json b/lang/zh-TW.json index 98dbde23..2f0d0d03 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -42,6 +42,7 @@ "label.edit": "編輯", "label.edit-dashboard": "編輯管理面板", "label.enable-share-url": "啟用分享連結", + "label.event": "Event", "label.event-data": "Event data", "label.events": "行為類別", "label.field": "Field", diff --git a/lib/auth.ts b/lib/auth.ts index bf01a1ab..cfd5c4ce 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -13,7 +13,7 @@ import { import { getTeamUser } from 'queries'; import { getTeamWebsite, getTeamWebsiteByTeamMemberId } from 'queries/admin/teamWebsite'; import { validate } from 'uuid'; -import { loadWebsite } from './query'; +import { loadWebsite } from './load'; import { Auth } from './types'; const log = debug('umami:auth'); diff --git a/lib/clickhouse.ts b/lib/clickhouse.ts index eb73d83c..3684d075 100644 --- a/lib/clickhouse.ts +++ b/lib/clickhouse.ts @@ -2,7 +2,6 @@ import { ClickHouse } from 'clickhouse'; import dateFormat from 'dateformat'; import debug from 'debug'; import { CLICKHOUSE } from 'lib/db'; -import { getDynamicDataType } from './dynamicData'; import { WebsiteMetricFilter } from './types'; import { FILTER_COLUMNS } from './constants'; @@ -62,49 +61,6 @@ function getDateFormat(date) { return `'${dateFormat(date, 'UTC:yyyy-mm-dd HH:MM:ss')}'`; } -function getBetweenDates(field, startAt, endAt) { - return `${field} between ${getDateFormat(startAt)} and ${getDateFormat(endAt)}`; -} - -function getEventDataFilterQuery( - filters: { - eventKey?: string; - eventValue?: string | number | boolean | Date; - }[] = [], - params: any, -) { - const query = filters.reduce((ac, cv, i) => { - const type = getDynamicDataType(cv.eventValue); - - let value = cv.eventValue; - - ac.push(`and (event_key = {eventKey${i}:String}`); - - switch (type) { - case 'number': - ac.push(`and number_value = {eventValue${i}:UInt64})`); - break; - case 'string': - ac.push(`and string_value = {eventValue${i}:String})`); - break; - case 'boolean': - ac.push(`and string_value = {eventValue${i}:String})`); - value = cv ? 'true' : 'false'; - break; - case 'date': - ac.push(`and date_value = {eventValue${i}:DateTime('UTC')})`); - break; - } - - params[`eventKey${i}`] = cv.eventKey; - params[`eventValue${i}`] = value; - - return ac; - }, []); - - return query.join('\n'); -} - function getFilterQuery(filters = {}, params = {}) { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; @@ -150,7 +106,7 @@ function parseFilters(filters: WebsiteMetricFilter = {}, params: any = {}) { }; } -async function rawQuery(query, params = {}): Promise { +async function rawQuery(query: string, params: object = {}): Promise { if (process.env.LOG_QUERY) { log('QUERY:\n', query); log('PARAMETERS:\n', params); @@ -166,7 +122,7 @@ async function findUnique(data) { throw `${data.length} records found when expecting 1.`; } - return data[0] ?? null; + return findFirst(data); } async function findFirst(data) { @@ -189,10 +145,8 @@ export default { getDateStringQuery, getDateQuery, getDateFormat, - getBetweenDates, getFilterQuery, getFunnelQuery, - getEventDataFilterQuery, parseFilters, findUnique, findFirst, diff --git a/lib/constants.ts b/lib/constants.ts index 209a97b6..cae654a6 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -18,7 +18,7 @@ export const DEFAULT_THEME = 'light'; export const DEFAULT_ANIMATION_DURATION = 300; export const DEFAULT_DATE_RANGE = '24hour'; export const DEFAULT_WEBSITE_LIMIT = 10; -export const DEFAULT_CREATED_AT = '2000-01-01'; +export const DEFAULT_RESET_DATE = '2000-01-01'; export const REALTIME_RANGE = 30; export const REALTIME_INTERVAL = 5000; @@ -120,6 +120,37 @@ export const ROLE_PERMISSIONS = { [ROLES.teamMember]: [], } as const; +export const WEBSITE_EVENT_FIELDS = { + eventId: { name: 'event_id', type: 'uuid', label: 'Event ID' }, + websiteId: { name: 'website_id', type: 'uuid', label: 'Website ID' }, + sessionId: { name: 'session_id', type: 'uuid', label: 'Session ID' }, + createdAt: { name: 'created_at', type: 'date', label: 'Created date' }, + urlPath: { name: 'url_path', type: 'string', label: 'URL path' }, + urlQuery: { name: 'url_query', type: 'string', label: 'URL query' }, + referrerPath: { name: 'referrer_path', type: 'string', label: 'Referrer path' }, + referrerQuery: { name: 'referrer_query', type: 'string', label: 'Referrer query' }, + referrerDomain: { name: 'referrer_domain', type: 'string', label: 'Referrer domain' }, + pageTitle: { name: 'page_title', type: 'string', label: 'Page title' }, + eventType: { name: 'event_type', type: 'string', label: 'Event type' }, + eventName: { name: 'event_name', type: 'string', label: 'Event name' }, +}; + +export const SESSION_FIELDS = { + sessionId: { name: 'session_id', type: 'uuid' }, + websiteId: { name: 'website_id', type: 'uuid' }, + hostname: { name: 'hostname', type: 'string' }, + browser: { name: 'browser', type: 'string' }, + os: { name: 'os', type: 'string' }, + device: { name: 'device', type: 'string' }, + screen: { name: 'screen', type: 'string' }, + language: { name: 'language', type: 'string' }, + country: { name: 'country', type: 'string' }, + subdivision1: { name: 'subdivision1', type: 'string' }, + subdivision2: { name: 'subdivision2', type: 'string' }, + city: { name: 'city', type: 'string' }, + createdAt: { name: 'created_at', type: 'date' }, +}; + export const THEME_COLORS = { light: { primary: '#2680eb', @@ -166,10 +197,9 @@ export const EVENT_COLORS = [ '#ffec16', ]; -export const DOMAIN_REGEX = +export const DOMAIN_REGEX = /^(localhost(:[1-9]\d{0,4})?|((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9-]+(-[a-z0-9-]+)*\.)+(xn--)?[a-z0-9-]{2,63})$/; - export const SHARE_ID_REGEX = /^[a-zA-Z0-9]{16}$/; export const DESKTOP_SCREEN_WIDTH = 1920; diff --git a/lib/crypto.js b/lib/crypto.js index fcd3e2c0..059e7b66 100644 --- a/lib/crypto.js +++ b/lib/crypto.js @@ -1,5 +1,3 @@ -import crypto from 'crypto'; -import { v4, v5 } from 'uuid'; import { startOfMonth } from 'date-fns'; import { hash } from 'next-basics'; @@ -12,13 +10,3 @@ export function salt() { return hash(secret(), ROTATING_SALT); } - -export function uuid(...args) { - if (!args.length) return v4(); - - return v5(hash(...args, salt()), v5.DNS); -} - -export function md5(...args) { - return crypto.createHash('md5').update(args.join('')).digest('hex'); -} diff --git a/lib/date.js b/lib/date.js index 526354b3..bf5dd90a 100644 --- a/lib/date.js +++ b/lib/date.js @@ -26,10 +26,20 @@ import { differenceInCalendarMonths, differenceInCalendarYears, format, - parseISO, + max, + min, + isDate, } from 'date-fns'; import { getDateLocale } from 'lib/lang'; +const dateFuncs = { + minute: [differenceInMinutes, addMinutes, startOfMinute], + hour: [differenceInHours, addHours, startOfHour], + day: [differenceInCalendarDays, addDays, startOfDay], + month: [differenceInCalendarMonths, addMonths, startOfMonth], + year: [differenceInCalendarYears, addYears, startOfYear], +}; + export function getTimezone() { return moment.tz.guess(); } @@ -43,11 +53,19 @@ export function parseDateRange(value, locale = 'en-US') { return value; } - if (value?.startsWith?.('range')) { - const [, startAt, endAt] = value.split(':'); + if (value === 'all') { + return { + startDate: new Date(0), + endDate: new Date(1), + value, + }; + } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); + if (value?.startsWith?.('range')) { + const [, startTime, endTime] = value.split(':'); + + const startDate = new Date(+startTime); + const endDate = new Date(+endTime); return { ...getDateRangeValues(startDate, endDate), @@ -148,17 +166,34 @@ export function parseDateRange(value, locale = 'en-US') { } } -export function getDateRangeValues(startDate, endDate) { - let unit = 'year'; - if (differenceInHours(endDate, startDate) <= 48) { - unit = 'hour'; +export function getAllowedUnits(startDate, endDate) { + const units = ['minute', 'hour', 'day', 'month', 'year']; + const minUnit = getMinimumUnit(startDate, endDate); + const index = units.indexOf(minUnit); + + return index >= 0 ? units.splice(index) : []; +} + +export function getMinimumUnit(startDate, endDate) { + if (differenceInMinutes(endDate, startDate) <= 60) { + return 'minute'; + } else if (differenceInHours(endDate, startDate) <= 48) { + return 'hour'; } else if (differenceInCalendarDays(endDate, startDate) <= 90) { - unit = 'day'; + return 'day'; } else if (differenceInCalendarMonths(endDate, startDate) <= 24) { - unit = 'month'; + return 'month'; } - return { startDate: startOfDay(startDate), endDate: endOfDay(endDate), unit }; + return 'year'; +} + +export function getDateRangeValues(startDate, endDate) { + return { + startDate: startOfDay(startDate), + endDate: endOfDay(endDate), + unit: getMinimumUnit(startDate, endDate), + }; } export function getDateFromString(str) { @@ -174,14 +209,6 @@ export function getDateFromString(str) { return new Date(year, month - 1, day); } -const dateFuncs = { - minute: [differenceInMinutes, addMinutes, startOfMinute], - hour: [differenceInHours, addHours, startOfHour], - day: [differenceInCalendarDays, addDays, startOfDay], - month: [differenceInCalendarMonths, addMonths, startOfMonth], - year: [differenceInCalendarYears, addYears, startOfYear], -}; - export function getDateArray(data, startDate, endDate, unit) { const arr = []; const [diff, add, normalize] = dateFuncs[unit]; @@ -227,3 +254,11 @@ export function dateFormat(date, str, locale = 'en-US') { locale: getDateLocale(locale), }); } + +export function maxDate(...args) { + return max(args.filter(n => isDate(n))); +} + +export function minDate(...args) { + return min(args.filter(n => isDate(n))); +} diff --git a/lib/db.js b/lib/db.js index 19e46a3d..750cdec0 100644 --- a/lib/db.js +++ b/lib/db.js @@ -35,3 +35,7 @@ export async function runQuery(queries) { return queries[CLICKHOUSE](); } } + +export function notImplemented() { + throw new Error('Not implemented.'); +} diff --git a/lib/detect.ts b/lib/detect.ts index 2597739b..9c1e1fa4 100644 --- a/lib/detect.ts +++ b/lib/detect.ts @@ -1,5 +1,5 @@ import path from 'path'; -import requestIp from 'request-ip'; +import { getClientIp } from 'request-ip'; import { browserName, detectOS } from 'detect-browser'; import isLocalhost from 'is-localhost-ip'; import maxmind from 'maxmind'; @@ -25,7 +25,7 @@ export function getIpAddress(req) { return req.headers['cf-connecting-ip']; } - return requestIp.getClientIp(req); + return getClientIp(req); } export function getDevice(screen, os) { @@ -62,6 +62,14 @@ export async function getLocation(ip, req) { return; } + // Cloudflare headers + if (req.headers['cf-ipcountry']) { + return { + country: req.headers['cf-ipcountry'], + }; + } + + // Vercel headers if (req.headers['x-vercel-ip-country']) { const country = req.headers['x-vercel-ip-country']; const region = req.headers['x-vercel-ip-country-region']; diff --git a/lib/kafka.ts b/lib/kafka.ts index 8f5bb87f..10326888 100644 --- a/lib/kafka.ts +++ b/lib/kafka.ts @@ -61,7 +61,7 @@ async function getProducer(): Promise { return producer; } -function getDateFormat(date, format?): string { +function getDateFormat(date: Date, format?: string): string { return dateFormat(date, format ? format : 'UTC:yyyy-mm-dd HH:MM:ss'); } diff --git a/lib/load.ts b/lib/load.ts new file mode 100644 index 00000000..4ce18b09 --- /dev/null +++ b/lib/load.ts @@ -0,0 +1,51 @@ +import cache from 'lib/cache'; +import { getWebsite, getSession, getUser } from 'queries'; +import { User, Website, Session } from '@prisma/client'; + +export async function loadWebsite(websiteId: string): Promise { + let website; + + if (cache.enabled) { + website = await cache.fetchWebsite(websiteId); + } else { + website = await getWebsite({ id: websiteId }); + } + + if (!website || website.deletedAt) { + return null; + } + + return website; +} + +export async function loadSession(sessionId: string): Promise { + let session; + + if (cache.enabled) { + session = await cache.fetchSession(sessionId); + } else { + session = await getSession({ id: sessionId }); + } + + if (!session) { + return null; + } + + return session; +} + +export async function loadUser(userId: string): Promise { + let user; + + if (cache.enabled) { + user = await cache.fetchUser(userId); + } else { + user = await getUser({ id: userId }); + } + + if (!user || user.deletedAt) { + return null; + } + + return user; +} diff --git a/lib/middleware.ts b/lib/middleware.ts index 1fd13b09..4185f80b 100644 --- a/lib/middleware.ts +++ b/lib/middleware.ts @@ -73,5 +73,6 @@ export const useAuth = createMiddleware(async (req, res, next) => { } (req as any).auth = { user, token, shareToken, authKey }; + next(); }); diff --git a/lib/prisma.ts b/lib/prisma.ts index 875f5897..b02f69f7 100644 --- a/lib/prisma.ts +++ b/lib/prisma.ts @@ -1,7 +1,6 @@ import prisma from '@umami/prisma-client'; import moment from 'moment-timezone'; import { MYSQL, POSTGRESQL, getDatabaseType } from 'lib/db'; -import { getDynamicDataType } from './dynamicData'; import { FILTER_COLUMNS } from './constants'; const MYSQL_DATE_FORMATS = { @@ -20,20 +19,8 @@ const POSTGRESQL_DATE_FORMATS = { year: 'YYYY-01-01', }; -function toUuid(): string { - const db = getDatabaseType(process.env.DATABASE_URL); - - if (db === POSTGRESQL) { - return '::uuid'; - } - - if (db === MYSQL) { - return ''; - } -} - function getAddMinutesQuery(field: string, minutes: number) { - const db = getDatabaseType(process.env.DATABASE_URL); + const db = getDatabaseType(); if (db === POSTGRESQL) { return `${field} + interval '${minutes} minute'`; @@ -45,7 +32,7 @@ function getAddMinutesQuery(field: string, minutes: number) { } function getDateQuery(field: string, unit: string, timezone?: string): string { - const db = getDatabaseType(process.env.DATABASE_URL); + const db = getDatabaseType(); if (db === POSTGRESQL) { if (timezone) { @@ -65,8 +52,8 @@ function getDateQuery(field: string, unit: string, timezone?: string): string { } } -function getTimestampInterval(field: string): string { - const db = getDatabaseType(process.env.DATABASE_URL); +function getTimestampIntervalQuery(field: string): string { + const db = getDatabaseType(); if (db === POSTGRESQL) { return `floor(extract(epoch from max(${field}) - min(${field})))`; @@ -77,47 +64,6 @@ function getTimestampInterval(field: string): string { } } -function getEventDataFilterQuery( - filters: { - eventKey?: string; - eventValue?: string | number | boolean | Date; - }[], - params: any[], -) { - const query = filters.reduce((ac, cv) => { - const type = getDynamicDataType(cv.eventValue); - - let value = cv.eventValue; - - ac.push(`and (event_key = $${params.length + 1}`); - params.push(cv.eventKey); - - switch (type) { - case 'number': - ac.push(`and number_value = $${params.length + 1})`); - params.push(value); - break; - case 'string': - ac.push(`and string_value = $${params.length + 1})`); - params.push(decodeURIComponent(cv.eventValue as string)); - break; - case 'boolean': - ac.push(`and string_value = $${params.length + 1})`); - params.push(decodeURIComponent(cv.eventValue as string)); - value = cv ? 'true' : 'false'; - break; - case 'date': - ac.push(`and date_value = $${params.length + 1})`); - params.push(cv.eventValue); - break; - } - - return ac; - }, []); - - return query.join('\n'); -} - function getFilterQuery(filters = {}, params = []): string { const query = Object.keys(filters).reduce((arr, key) => { const filter = filters[key]; @@ -163,7 +109,7 @@ function getFunnelQuery( and l0.referrer_path = $${i + initParamLength} and l0.url_path = $${levelNumber + initParamLength} and created_at between $2 and $3 - and website_id = $1${toUuid()} + and website_id = $1 )`; } @@ -197,27 +143,32 @@ function parseFilters( }; } -async function rawQuery(query: string, params: never[] = []): Promise { - const db = getDatabaseType(process.env.DATABASE_URL); +async function rawQuery(sql: string, data: object): Promise { + const db = getDatabaseType(); + const params = []; if (db !== POSTGRESQL && db !== MYSQL) { return Promise.reject(new Error('Unknown database.')); } - const sql = db === MYSQL ? query.replace(/\$[0-9]+/g, '?') : query; + const query = sql?.replaceAll(/\{\{\s*(\w+)(::\w+)?\s*}}/g, (...args) => { + const [, name, type] = args; - return prisma.rawQuery(sql, params); + params.push(data[name]); + + return db === MYSQL ? '?' : `$${params.length}${type ?? ''}`; + }); + + return prisma.rawQuery(query, params); } export default { ...prisma, getAddMinutesQuery, getDateQuery, - getTimestampInterval, + getTimestampIntervalQuery, getFilterQuery, getFunnelQuery, - getEventDataFilterQuery, - toUuid, parseFilters, rawQuery, }; diff --git a/lib/query.ts b/lib/query.ts index 4ce18b09..88ce62d4 100644 --- a/lib/query.ts +++ b/lib/query.ts @@ -1,51 +1,31 @@ -import cache from 'lib/cache'; -import { getWebsite, getSession, getUser } from 'queries'; -import { User, Website, Session } from '@prisma/client'; +import { NextApiRequest } from 'next'; +import { getAllowedUnits, getMinimumUnit } from './date'; +import { getWebsiteDateRange } from '../queries'; -export async function loadWebsite(websiteId: string): Promise { - let website; +export async function parseDateRangeQuery(req: NextApiRequest) { + const { id: websiteId, startAt, endAt, unit } = req.query; - if (cache.enabled) { - website = await cache.fetchWebsite(websiteId); - } else { - website = await getWebsite({ id: websiteId }); + // All-time + if (+startAt === 0 && +endAt === 1) { + const result = await getWebsiteDateRange(websiteId as string); + const { min, max } = result[0]; + const startDate = new Date(min); + const endDate = new Date(max); + + return { + startDate, + endDate, + unit: getMinimumUnit(startDate, endDate), + }; } - if (!website || website.deletedAt) { - return null; - } + const startDate = new Date(+startAt); + const endDate = new Date(+endAt); + const minUnit = getMinimumUnit(startDate, endDate); - return website; -} - -export async function loadSession(sessionId: string): Promise { - let session; - - if (cache.enabled) { - session = await cache.fetchSession(sessionId); - } else { - session = await getSession({ id: sessionId }); - } - - if (!session) { - return null; - } - - return session; -} - -export async function loadUser(userId: string): Promise { - let user; - - if (cache.enabled) { - user = await cache.fetchUser(userId); - } else { - user = await getUser({ id: userId }); - } - - if (!user || user.deletedAt) { - return null; - } - - return user; + return { + startDate, + endDate, + unit: (getAllowedUnits(startDate, endDate).includes(unit as string) ? unit : minUnit) as string, + }; } diff --git a/lib/session.ts b/lib/session.ts index 29ff694f..1f693bbd 100644 --- a/lib/session.ts +++ b/lib/session.ts @@ -1,11 +1,11 @@ -import { secret, uuid } from 'lib/crypto'; +import { secret } from 'lib/crypto'; import { getClientInfo, getJsonBody } from 'lib/detect'; -import { parseToken } from 'next-basics'; +import { parseToken, uuid } from 'next-basics'; import { CollectRequestBody, NextApiRequestCollect } from 'pages/api/send'; import { createSession } from 'queries'; import { validate } from 'uuid'; import cache from './cache'; -import { loadSession, loadWebsite } from './query'; +import { loadSession, loadWebsite } from './load'; export async function findSession(req: NextApiRequestCollect) { const { payload } = getJsonBody(req); @@ -30,6 +30,12 @@ export async function findSession(req: NextApiRequestCollect) { // Verify payload const { website: websiteId, hostname, screen, language } = payload; + // Check the hostname value for legality to eliminate dirty data + const validHostnameRegex = /^[\w-.]+$/; + if (!validHostnameRegex.test(hostname)) { + throw new Error('Invalid hostname.'); + } + if (!validate(websiteId)) { throw new Error('Invalid website ID.'); } diff --git a/lib/sql.ts b/lib/sql.ts new file mode 100644 index 00000000..e69de29b diff --git a/lib/types.ts b/lib/types.ts index 2e1ed986..7c91ec4f 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -137,3 +137,10 @@ export interface RealtimeUpdate { events: any[]; timestamp: number; } + +export interface DateRange { + startDate: Date; + endDate: Date; + unit: string; + value: string; +} diff --git a/package.json b/package.json index 95c410c6..ed8bbdab 100644 --- a/package.json +++ b/package.json @@ -90,7 +90,7 @@ "maxmind": "^4.3.6", "moment-timezone": "^0.5.35", "next": "13.3.1", - "next-basics": "^0.31.0", + "next-basics": "^0.33.0", "node-fetch": "^3.2.8", "npm-run-all": "^4.1.5", "react": "^18.2.0", diff --git a/pages/api/event-data/events.ts b/pages/api/event-data/events.ts new file mode 100644 index 00000000..1d74c3d2 --- /dev/null +++ b/pages/api/event-data/events.ts @@ -0,0 +1,39 @@ +import { canViewWebsite } from 'lib/auth'; +import { useCors, useAuth } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { ok, methodNotAllowed, unauthorized } from 'next-basics'; +import { getEventDataEvents } from 'queries'; + +export interface EventDataFieldsRequestBody { + websiteId: string; + dateRange: { + startDate: string; + endDate: string; + }; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + if (req.method === 'GET') { + const { websiteId, startAt, endAt, field, event } = req.query; + + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const data = await getEventDataEvents(websiteId, new Date(+startAt), new Date(+endAt), { + field, + event, + }); + + return ok(res, data); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/me/teams.ts b/pages/api/me/teams.ts new file mode 100644 index 00000000..36699016 --- /dev/null +++ b/pages/api/me/teams.ts @@ -0,0 +1,15 @@ +import { useCors } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed } from 'next-basics'; +import userTeams from 'pages/api/users/[id]/teams'; + +export default async (req: NextApiRequestQueryBody, res: NextApiResponse) => { + await useCors(req, res); + + if (req.method === 'GET') { + return userTeams(req, res); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/me/websites.ts b/pages/api/me/websites.ts index dc9c0d62..29f1e431 100644 --- a/pages/api/me/websites.ts +++ b/pages/api/me/websites.ts @@ -1,21 +1,18 @@ import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; -import { methodNotAllowed, ok } from 'next-basics'; -import { getUserWebsites } from 'queries'; +import { methodNotAllowed } from 'next-basics'; + +import userWebsites from 'pages/api/users/[id]/websites'; export default async (req: NextApiRequestQueryBody, res: NextApiResponse) => { await useCors(req, res); await useAuth(req, res); - const { - user: { id: userId }, - } = req.auth; - if (req.method === 'GET') { - const websites = await getUserWebsites(userId); + req.query.id = req.auth.user.id; - return ok(res, websites); + return userWebsites(req, res); } return methodNotAllowed(res); diff --git a/pages/api/reports/funnel.ts b/pages/api/reports/funnel.ts index 1e121326..33882e03 100644 --- a/pages/api/reports/funnel.ts +++ b/pages/api/reports/funnel.ts @@ -3,7 +3,7 @@ import { useCors, useAuth } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { ok, methodNotAllowed, unauthorized } from 'next-basics'; -import { getPageviewFunnel } from 'queries'; +import { getFunnel } from 'queries'; export interface FunnelRequestBody { websiteId: string; @@ -41,7 +41,7 @@ export default async ( return unauthorized(res); } - const data = await getPageviewFunnel(websiteId, { + const data = await getFunnel(websiteId, { startDate: new Date(startDate), endDate: new Date(endDate), urls, diff --git a/pages/api/reports/index.ts b/pages/api/reports/index.ts index b2c5da9e..3fe34134 100644 --- a/pages/api/reports/index.ts +++ b/pages/api/reports/index.ts @@ -1,8 +1,7 @@ -import { uuid } from 'lib/crypto'; import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; -import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { methodNotAllowed, ok, unauthorized, uuid } from 'next-basics'; import { createReport, getReports } from 'queries'; import { canViewWebsite } from 'lib/auth'; diff --git a/pages/api/reports/insights.ts b/pages/api/reports/insights.ts new file mode 100644 index 00000000..dba11953 --- /dev/null +++ b/pages/api/reports/insights.ts @@ -0,0 +1,51 @@ +import { canViewWebsite } from 'lib/auth'; +import { useCors, useAuth } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { ok, methodNotAllowed, unauthorized } from 'next-basics'; +import { getInsights } from 'queries'; + +export interface InsightsRequestBody { + websiteId: string; + dateRange: { + startDate: string; + endDate: string; + }; + fields: string[]; + filters: string[]; + groups: string[]; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + if (req.method === 'POST') { + const { + websiteId, + dateRange: { startDate, endDate }, + fields, + filters, + groups, + } = req.body; + + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const data = await getInsights(websiteId, { + startDate: new Date(startDate), + endDate: new Date(endDate), + fields, + filters, + groups, + }); + + return ok(res, data); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/send.ts b/pages/api/send.ts index ec5f55b3..8c88c509 100644 --- a/pages/api/send.ts +++ b/pages/api/send.ts @@ -1,7 +1,7 @@ import isbot from 'isbot'; import ipaddr from 'ipaddr.js'; import { createToken, ok, send, badRequest, forbidden } from 'next-basics'; -import { saveEvent } from 'queries'; +import { saveEvent, saveSessionData } from 'queries'; import { useCors, useSession } from 'lib/middleware'; import { getJsonBody, getIpAddress } from 'lib/detect'; import { secret } from 'lib/crypto'; @@ -9,7 +9,6 @@ import { NextApiRequest, NextApiResponse } from 'next'; import { Resolver } from 'dns/promises'; import { CollectionType } from 'lib/types'; import { COLLECTION_TYPE } from 'lib/constants'; -import { saveSessionData } from 'queries/analytics/session/saveSessionData'; export interface CollectRequestBody { payload: { @@ -116,7 +115,7 @@ export default async (req: NextApiRequestCollect, res: NextApiResponse) => { }; function validateBody(res: NextApiResponse, { type, payload }: CollectRequestBody) { - const { data } = payload; + const { data } = payload || {}; // Validate type if (type !== COLLECTION_TYPE.event && type !== COLLECTION_TYPE.identify) { diff --git a/pages/api/teams/index.ts b/pages/api/teams/index.ts index 453f1ef3..316f3109 100644 --- a/pages/api/teams/index.ts +++ b/pages/api/teams/index.ts @@ -1,7 +1,7 @@ import { Team } from '@prisma/client'; import { NextApiRequestQueryBody } from 'lib/types'; import { canCreateTeam } from 'lib/auth'; -import { uuid } from 'lib/crypto'; +import { uuid } from 'next-basics'; import { useAuth } from 'lib/middleware'; import { NextApiResponse } from 'next'; import { getRandomChars, methodNotAllowed, ok, unauthorized } from 'next-basics'; diff --git a/pages/api/users/[id]/teams.ts b/pages/api/users/[id]/teams.ts new file mode 100644 index 00000000..c31b98ca --- /dev/null +++ b/pages/api/users/[id]/teams.ts @@ -0,0 +1,34 @@ +import { useAuth, useCors } from 'lib/middleware'; +import { NextApiRequestQueryBody } from 'lib/types'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { getUserTeams } from 'queries'; + +export interface UserWebsitesRequestBody { + name: string; + domain: string; + shareId: string; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + const { user } = req.auth; + const { id: userId } = req.query; + + if (req.method === 'GET') { + if (!user.isAdmin && user.id !== userId) { + return unauthorized(res); + } + + const teams = await getUserTeams(userId); + + return ok(res, teams); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/users/[id]/websites.ts b/pages/api/users/[id]/websites.ts index de4a3a3a..e94094a4 100644 --- a/pages/api/users/[id]/websites.ts +++ b/pages/api/users/[id]/websites.ts @@ -16,7 +16,6 @@ export default async ( ) => { await useCors(req, res); await useAuth(req, res); - const { user } = req.auth; const { id: userId } = req.query; @@ -25,7 +24,9 @@ export default async ( return unauthorized(res); } - const websites = await getUserWebsites(userId); + const { includeTeams } = req.query; + + const websites = await getUserWebsites(userId, { includeTeams }); return ok(res, websites); } diff --git a/pages/api/users/index.ts b/pages/api/users/index.ts index c6103c35..14b4e451 100644 --- a/pages/api/users/index.ts +++ b/pages/api/users/index.ts @@ -1,6 +1,6 @@ import { canCreateUser, canViewUsers } from 'lib/auth'; import { ROLES } from 'lib/constants'; -import { uuid } from 'lib/crypto'; +import { uuid } from 'next-basics'; import { useAuth } from 'lib/middleware'; import { NextApiRequestQueryBody, Role, User } from 'lib/types'; import { NextApiResponse } from 'next'; diff --git a/pages/api/websites/[id]/daterange.ts b/pages/api/websites/[id]/daterange.ts new file mode 100644 index 00000000..dc043560 --- /dev/null +++ b/pages/api/websites/[id]/daterange.ts @@ -0,0 +1,32 @@ +import { WebsiteActive, NextApiRequestQueryBody } from 'lib/types'; +import { canViewWebsite } from 'lib/auth'; +import { useAuth, useCors } from 'lib/middleware'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { getWebsiteDateRange } from 'queries'; + +export interface WebsiteDateRangeRequestQuery { + id: string; +} + +export default async ( + req: NextApiRequestQueryBody, + res: NextApiResponse, +) => { + await useCors(req, res); + await useAuth(req, res); + + const { id: websiteId } = req.query; + + if (req.method === 'GET') { + if (!(await canViewWebsite(req.auth, websiteId))) { + return unauthorized(res); + } + + const result = await getWebsiteDateRange(websiteId); + + return ok(res, result); + } + + return methodNotAllowed(res); +}; diff --git a/pages/api/websites/[id]/events.ts b/pages/api/websites/[id]/events.ts index 12473da0..b9e3ac71 100644 --- a/pages/api/websites/[id]/events.ts +++ b/pages/api/websites/[id]/events.ts @@ -5,6 +5,7 @@ import moment from 'moment-timezone'; import { NextApiResponse } from 'next'; import { badRequest, methodNotAllowed, ok, unauthorized } from 'next-basics'; import { getEventMetrics } from 'queries'; +import { parseDateRangeQuery } from 'lib/query'; const unitTypes = ['year', 'month', 'hour', 'day']; @@ -25,7 +26,8 @@ export default async ( await useCors(req, res); await useAuth(req, res); - const { id: websiteId, startAt, endAt, unit, timezone, url, eventName } = req.query; + const { id: websiteId, timezone, url, eventName } = req.query; + const { startDate, endDate, unit } = await parseDateRangeQuery(req); if (req.method === 'GET') { if (!(await canViewWebsite(req.auth, websiteId))) { @@ -35,8 +37,6 @@ export default async ( if (!moment.tz.zone(timezone) || !unitTypes.includes(unit)) { return badRequest(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); const events = await getEventMetrics(websiteId, { startDate, diff --git a/pages/api/websites/[id]/metrics.ts b/pages/api/websites/[id]/metrics.ts index 5cf818a0..4c6fb270 100644 --- a/pages/api/websites/[id]/metrics.ts +++ b/pages/api/websites/[id]/metrics.ts @@ -5,6 +5,7 @@ import { canViewWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { SESSION_COLUMNS, EVENT_COLUMNS, FILTER_COLUMNS } from 'lib/constants'; import { getPageviewMetrics, getSessionMetrics } from 'queries'; +import { parseDateRangeQuery } from 'lib/query'; export interface WebsiteMetricsRequestQuery { id: string; @@ -34,8 +35,6 @@ export default async ( const { id: websiteId, type, - startAt, - endAt, url, referrer, title, @@ -54,8 +53,7 @@ export default async ( return unauthorized(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); + const { startDate, endDate } = await parseDateRangeQuery(req); if (SESSION_COLUMNS.includes(type)) { const column = FILTER_COLUMNS[type] || type; diff --git a/pages/api/websites/[id]/pageviews.ts b/pages/api/websites/[id]/pageviews.ts index 9dfd2264..453c6733 100644 --- a/pages/api/websites/[id]/pageviews.ts +++ b/pages/api/websites/[id]/pageviews.ts @@ -5,8 +5,7 @@ import { NextApiRequestQueryBody, WebsitePageviews } from 'lib/types'; import { canViewWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { getPageviewStats } from 'queries'; - -const unitTypes = ['year', 'month', 'hour', 'day']; +import { parseDateRangeQuery } from 'lib/query'; export interface WebsitePageviewRequestQuery { id: string; @@ -34,9 +33,6 @@ export default async ( const { id: websiteId, - startAt, - endAt, - unit, timezone, url, referrer, @@ -54,10 +50,9 @@ export default async ( return unauthorized(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); + const { startDate, endDate, unit } = await parseDateRangeQuery(req); - if (!moment.tz.zone(timezone) || !unitTypes.includes(unit)) { + if (!moment.tz.zone(timezone)) { return badRequest(res); } diff --git a/pages/api/websites/[id]/stats.ts b/pages/api/websites/[id]/stats.ts index 1e2f2292..3e2b96a8 100644 --- a/pages/api/websites/[id]/stats.ts +++ b/pages/api/websites/[id]/stats.ts @@ -1,8 +1,10 @@ +import { addMinutes, differenceInMinutes } from 'date-fns'; +import { NextApiResponse } from 'next'; +import { methodNotAllowed, ok, unauthorized } from 'next-basics'; import { canViewWebsite } from 'lib/auth'; import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody, WebsiteStats } from 'lib/types'; -import { NextApiResponse } from 'next'; -import { methodNotAllowed, ok, unauthorized } from 'next-basics'; +import { parseDateRangeQuery } from 'lib/query'; import { getWebsiteStats } from 'queries'; export interface WebsiteStatsRequestQuery { @@ -31,8 +33,6 @@ export default async ( const { id: websiteId, - startAt, - endAt, url, referrer, title, @@ -51,12 +51,10 @@ export default async ( return unauthorized(res); } - const startDate = new Date(+startAt); - const endDate = new Date(+endAt); - - const distance = endAt - startAt; - const prevStartDate = new Date(+startAt - distance); - const prevEndDate = new Date(+endAt - distance); + const { startDate, endDate } = await parseDateRangeQuery(req); + const diff = differenceInMinutes(endDate, startDate); + const prevStartDate = addMinutes(startDate, -diff); + const prevEndDate = addMinutes(endDate, -diff); const metrics = await getWebsiteStats(websiteId, { startDate, @@ -75,6 +73,7 @@ export default async ( city, }, }); + const prevPeriod = await getWebsiteStats(websiteId, { startDate: prevStartDate, endDate: prevEndDate, diff --git a/pages/api/websites/index.ts b/pages/api/websites/index.ts index 49797d08..c806c7bb 100644 --- a/pages/api/websites/index.ts +++ b/pages/api/websites/index.ts @@ -1,10 +1,11 @@ import { canCreateWebsite } from 'lib/auth'; -import { uuid } from 'lib/crypto'; +import { uuid } from 'next-basics'; import { useAuth, useCors } from 'lib/middleware'; import { NextApiRequestQueryBody } from 'lib/types'; import { NextApiResponse } from 'next'; import { methodNotAllowed, ok, unauthorized } from 'next-basics'; -import { createWebsite, getUserWebsites } from 'queries'; +import { createWebsite } from 'queries'; +import userWebsites from 'pages/api/users/[id]/websites'; export interface WebsitesRequestBody { name: string; @@ -24,9 +25,9 @@ export default async ( } = req.auth; if (req.method === 'GET') { - const websites = await getUserWebsites(userId); + req.query.id = userId; - return ok(res, websites); + return userWebsites(req, res); } if (req.method === 'POST') { diff --git a/pages/reports/event-data.js b/pages/reports/insights.js similarity index 50% rename from pages/reports/event-data.js rename to pages/reports/insights.js index 4566b320..45236e10 100644 --- a/pages/reports/event-data.js +++ b/pages/reports/insights.js @@ -1,13 +1,13 @@ import AppLayout from 'components/layout/AppLayout'; -import EventDataReport from 'components/pages/reports/event-data/EventDataReport'; +import InsightsReport from 'components/pages/reports/insights/InsightsReport'; import { useMessages } from 'hooks'; export default function () { const { formatMessage, labels } = useMessages(); return ( - - + + ); } diff --git a/public/intl/messages/am-ET.json b/public/intl/messages/am-ET.json index f367c254..69706b8b 100644 --- a/public/intl/messages/am-ET.json +++ b/public/intl/messages/am-ET.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Enable share URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unknown" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "View details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No data available." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ar-SA.json b/public/intl/messages/ar-SA.json index 33673f06..f7c5a9ea 100644 --- a/public/intl/messages/ar-SA.json +++ b/public/intl/messages/ar-SA.json @@ -17,6 +17,18 @@ "value": "سجل الأحداث" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "تفعيل مشاركة الرابط" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "الأحداث" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "الصلاحية" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "غير معروف" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "عرض التفاصيل" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "المواقع" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "الأمس" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "لا توجد بيانات متاحة." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/be-BY.json b/public/intl/messages/be-BY.json index 5e1d6a13..0c2a6ee2 100644 --- a/public/intl/messages/be-BY.json +++ b/public/intl/messages/be-BY.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Дазволіць дзяліцца спасылкай" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Падзеі" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Невядома" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Пабачыць дэталі" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Сайты" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Учора" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Няма дадзеных." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/bn-BD.json b/public/intl/messages/bn-BD.json index f068cd19..568b3bba 100644 --- a/public/intl/messages/bn-BD.json +++ b/public/intl/messages/bn-BD.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "শেয়ার ইউআরএল শেয়ার করুন" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "ঘটনা" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "অজানা" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "বিস্তারিত দেখুন" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "সবগুলো ওয়েবসাইট" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "কোন তথ্য নেই।" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ca-ES.json b/public/intl/messages/ca-ES.json index e9835ab5..a9947f91 100644 --- a/public/intl/messages/ca-ES.json +++ b/public/intl/messages/ca-ES.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Activa l'enllaç per compartir" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Esdeveniments" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Desconegut" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Veure els detalls" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Llocs web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ahir" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No hi ha dades disponibles." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/cs-CZ.json b/public/intl/messages/cs-CZ.json index 573ee2d8..63af5489 100644 --- a/public/intl/messages/cs-CZ.json +++ b/public/intl/messages/cs-CZ.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Povolit sdílení URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Události" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Neznámý" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Zobrazit detaily" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Weby" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Žádná data." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/da-DK.json b/public/intl/messages/da-DK.json index 5a18cd72..b8e4cba2 100644 --- a/public/intl/messages/da-DK.json +++ b/public/intl/messages/da-DK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktivér delings-URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Hændelser" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Ukendt" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vis detajler" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Hjemmesider" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Ingen data tilgængelig." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/de-CH.json b/public/intl/messages/de-CH.json index d35cabeb..7b485089 100644 --- a/public/intl/messages/de-CH.json +++ b/public/intl/messages/de-CH.json @@ -17,6 +17,18 @@ "value": "Aktivitätsverlauf" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Freigab-URL aktiviere" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Ereigniss" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Rollä" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unbekannt" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Details azeige" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websiite" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Gester" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Kei Date vorhande." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/de-DE.json b/public/intl/messages/de-DE.json index 2cb5a482..9a5a3196 100644 --- a/public/intl/messages/de-DE.json +++ b/public/intl/messages/de-DE.json @@ -17,6 +17,18 @@ "value": "Aktivitätsverlauf" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Freigabe-URL aktivieren" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Ereignisse" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Rolle" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unbekannt" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Details anzeigen" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Webseiten" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Gestern" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Keine Daten vorhanden." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/el-GR.json b/public/intl/messages/el-GR.json index 0818eac3..f29b1051 100644 --- a/public/intl/messages/el-GR.json +++ b/public/intl/messages/el-GR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Ενεργοποίηση κοινής χρήσης URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Γεγονότα" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Άγνωστο" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Λεπτομέρειες" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Ιστότοποι" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Δεν υπάρχουν διαθέσιμα δεδομένα." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/en-GB.json b/public/intl/messages/en-GB.json index 970c0546..ac6d9230 100644 --- a/public/intl/messages/en-GB.json +++ b/public/intl/messages/en-GB.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Enable share URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unknown" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "View details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No data available." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/en-US.json b/public/intl/messages/en-US.json index 11b34295..a137d545 100644 --- a/public/intl/messages/en-US.json +++ b/public/intl/messages/en-US.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Enable share URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Unknown" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "View details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No data available." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/es-ES.json b/public/intl/messages/es-ES.json new file mode 100644 index 00000000..fbe554ec --- /dev/null +++ b/public/intl/messages/es-ES.json @@ -0,0 +1,1290 @@ +{ + "label.access-code": [ + { + "type": 0, + "value": "Código de acceso" + } + ], + "label.actions": [ + { + "type": 0, + "value": "Acciones" + } + ], + "label.activity-log": [ + { + "type": 0, + "value": "Registro de actividad" + } + ], + "label.add": [ + { + "type": 0, + "value": "Añadir" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Añadir descripción" + } + ], + "label.add-website": [ + { + "type": 0, + "value": "Nuevo sitio web" + } + ], + "label.admin": [ + { + "type": 0, + "value": "Administrador" + } + ], + "label.all": [ + { + "type": 0, + "value": "Todos" + } + ], + "label.all-time": [ + { + "type": 0, + "value": "Todos los tiempos" + } + ], + "label.analytics": [ + { + "type": 0, + "value": "Analíticas" + } + ], + "label.average-visit-time": [ + { + "type": 0, + "value": "Tiempo promedio de visita" + } + ], + "label.back": [ + { + "type": 0, + "value": "Atrás" + } + ], + "label.bounce-rate": [ + { + "type": 0, + "value": "Porcentaje de rebote" + } + ], + "label.browsers": [ + { + "type": 0, + "value": "Navegadores" + } + ], + "label.cancel": [ + { + "type": 0, + "value": "Cancelar" + } + ], + "label.change-password": [ + { + "type": 0, + "value": "Cambiar contraseña" + } + ], + "label.cities": [ + { + "type": 0, + "value": "Ciudades" + } + ], + "label.clear-all": [ + { + "type": 0, + "value": "Limpiar todo" + } + ], + "label.confirm": [ + { + "type": 0, + "value": "Confirmar" + } + ], + "label.confirm-password": [ + { + "type": 0, + "value": "Confirmar contraseña" + } + ], + "label.continue": [ + { + "type": 0, + "value": "Continuar" + } + ], + "label.countries": [ + { + "type": 0, + "value": "Países" + } + ], + "label.create-team": [ + { + "type": 0, + "value": "Crear equipo" + } + ], + "label.create-user": [ + { + "type": 0, + "value": "Crear usuario" + } + ], + "label.created": [ + { + "type": 0, + "value": "Creado" + } + ], + "label.current-password": [ + { + "type": 0, + "value": "Contraseña actual" + } + ], + "label.custom-range": [ + { + "type": 0, + "value": "Intervalo personalizado" + } + ], + "label.dashboard": [ + { + "type": 0, + "value": "Panel de control" + } + ], + "label.data": [ + { + "type": 0, + "value": "Datos" + } + ], + "label.date-range": [ + { + "type": 0, + "value": "Intervalo de fechas" + } + ], + "label.default-date-range": [ + { + "type": 0, + "value": "Intervalo por defecto" + } + ], + "label.delete": [ + { + "type": 0, + "value": "Eliminar" + } + ], + "label.delete-team": [ + { + "type": 0, + "value": "Eliminar equipo" + } + ], + "label.delete-user": [ + { + "type": 0, + "value": "Eliminar usuario" + } + ], + "label.delete-website": [ + { + "type": 0, + "value": "Eliminar sitio" + } + ], + "label.desktop": [ + { + "type": 0, + "value": "Escritorio" + } + ], + "label.details": [ + { + "type": 0, + "value": "Detalles" + } + ], + "label.devices": [ + { + "type": 0, + "value": "Dispositivos" + } + ], + "label.dismiss": [ + { + "type": 0, + "value": "Ignorar" + } + ], + "label.domain": [ + { + "type": 0, + "value": "Dominio" + } + ], + "label.edit": [ + { + "type": 0, + "value": "Editar" + } + ], + "label.edit-dashboard": [ + { + "type": 0, + "value": "Editar panel" + } + ], + "label.enable-share-url": [ + { + "type": 0, + "value": "Habilitar compartir URL" + } + ], + "label.event": [ + { + "type": 0, + "value": "Evento" + } + ], + "label.event-data": [ + { + "type": 0, + "value": "Datos de evento" + } + ], + "label.events": [ + { + "type": 0, + "value": "Eventos" + } + ], + "label.field": [ + { + "type": 0, + "value": "Campo" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Campos" + } + ], + "label.filter-combined": [ + { + "type": 0, + "value": "Combinado" + } + ], + "label.filter-raw": [ + { + "type": 0, + "value": "En crudo" + } + ], + "label.funnel": [ + { + "type": 0, + "value": "Funnel" + } + ], + "label.join": [ + { + "type": 0, + "value": "Unir" + } + ], + "label.join-team": [ + { + "type": 0, + "value": "Unirse al equipo" + } + ], + "label.language": [ + { + "type": 0, + "value": "Idioma" + } + ], + "label.languages": [ + { + "type": 0, + "value": "Idiomas" + } + ], + "label.laptop": [ + { + "type": 0, + "value": "Portátil" + } + ], + "label.last-days": [ + { + "type": 0, + "value": "Últimos " + }, + { + "type": 1, + "value": "x" + }, + { + "type": 0, + "value": " días" + } + ], + "label.last-hours": [ + { + "type": 0, + "value": "Últimas " + }, + { + "type": 1, + "value": "x" + }, + { + "type": 0, + "value": " horas" + } + ], + "label.leave": [ + { + "type": 0, + "value": "Abandonar" + } + ], + "label.leave-team": [ + { + "type": 0, + "value": "Abandonar equipo" + } + ], + "label.login": [ + { + "type": 0, + "value": "Iniciar sesión" + } + ], + "label.logout": [ + { + "type": 0, + "value": "Cerrar sesión" + } + ], + "label.members": [ + { + "type": 0, + "value": "Miembros" + } + ], + "label.mobile": [ + { + "type": 0, + "value": "Móvil" + } + ], + "label.more": [ + { + "type": 0, + "value": "Más" + } + ], + "label.name": [ + { + "type": 0, + "value": "Nombre" + } + ], + "label.new-password": [ + { + "type": 0, + "value": "Nueva contraseña" + } + ], + "label.none": [ + { + "type": 0, + "value": "Ninguno" + } + ], + "label.operating-systems": [ + { + "type": 0, + "value": "Sistemas operativos" + } + ], + "label.owner": [ + { + "type": 0, + "value": "Propietario" + } + ], + "label.page-views": [ + { + "type": 0, + "value": "Vistas" + } + ], + "label.pages": [ + { + "type": 0, + "value": "Páginas" + } + ], + "label.password": [ + { + "type": 0, + "value": "Contraseña" + } + ], + "label.powered-by": [ + { + "type": 0, + "value": "Con la ayuda de " + }, + { + "type": 1, + "value": "name" + } + ], + "label.profile": [ + { + "type": 0, + "value": "Perfil" + } + ], + "label.queries": [ + { + "type": 0, + "value": "Consultas" + } + ], + "label.query": [ + { + "type": 0, + "value": "Query" + } + ], + "label.query-parameters": [ + { + "type": 0, + "value": "Parámetros de petición" + } + ], + "label.realtime": [ + { + "type": 0, + "value": "Tiempo real" + } + ], + "label.referrers": [ + { + "type": 0, + "value": "Referido desde" + } + ], + "label.refresh": [ + { + "type": 0, + "value": "Actualizar" + } + ], + "label.regenerate": [ + { + "type": 0, + "value": "Regenerar" + } + ], + "label.regions": [ + { + "type": 0, + "value": "Regiones" + } + ], + "label.remove": [ + { + "type": 0, + "value": "Quitar" + } + ], + "label.reports": [ + { + "type": 0, + "value": "Reportes" + } + ], + "label.required": [ + { + "type": 0, + "value": "Obligatorio" + } + ], + "label.reset": [ + { + "type": 0, + "value": "Reiniciar" + } + ], + "label.reset-website": [ + { + "type": 0, + "value": "Reiniciar estadísticas" + } + ], + "label.role": [ + { + "type": 0, + "value": "Rol" + } + ], + "label.run-query": [ + { + "type": 0, + "value": "Ejecutar consulta" + } + ], + "label.save": [ + { + "type": 0, + "value": "Guardar" + } + ], + "label.screens": [ + { + "type": 0, + "value": "Pantallas" + } + ], + "label.select-date": [ + { + "type": 0, + "value": "Seleccionar fecha" + } + ], + "label.select-website": [ + { + "type": 0, + "value": "Seleccionar sitio web" + } + ], + "label.sessions": [ + { + "type": 0, + "value": "Sesiones" + } + ], + "label.settings": [ + { + "type": 0, + "value": "Configuraciones" + } + ], + "label.share-url": [ + { + "type": 0, + "value": "Compartir URL" + } + ], + "label.single-day": [ + { + "type": 0, + "value": "Un solo día" + } + ], + "label.tablet": [ + { + "type": 0, + "value": "Tableta" + } + ], + "label.team": [ + { + "type": 0, + "value": "Equipo" + } + ], + "label.team-guest": [ + { + "type": 0, + "value": "Invitado al equipo" + } + ], + "label.team-id": [ + { + "type": 0, + "value": "ID de equipo" + } + ], + "label.team-member": [ + { + "type": 0, + "value": "Miembro del equipo" + } + ], + "label.team-owner": [ + { + "type": 0, + "value": "Admin. del equipo" + } + ], + "label.teams": [ + { + "type": 0, + "value": "Equipos" + } + ], + "label.theme": [ + { + "type": 0, + "value": "Tema" + } + ], + "label.this-month": [ + { + "type": 0, + "value": "Este mes" + } + ], + "label.this-week": [ + { + "type": 0, + "value": "Esta semana" + } + ], + "label.this-year": [ + { + "type": 0, + "value": "Este año" + } + ], + "label.timezone": [ + { + "type": 0, + "value": "Zona horaria" + } + ], + "label.title": [ + { + "type": 0, + "value": "Título" + } + ], + "label.today": [ + { + "type": 0, + "value": "Hoy" + } + ], + "label.toggle-charts": [ + { + "type": 0, + "value": "Alternar gráficas" + } + ], + "label.tracking-code": [ + { + "type": 0, + "value": "Código de rastreo" + } + ], + "label.unique-visitors": [ + { + "type": 0, + "value": "Visitantes únicos" + } + ], + "label.unknown": [ + { + "type": 0, + "value": "Desconocida" + } + ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], + "label.urls": [ + { + "type": 0, + "value": "URLs" + } + ], + "label.user": [ + { + "type": 0, + "value": "Usuario" + } + ], + "label.username": [ + { + "type": 0, + "value": "Nombre de usuario" + } + ], + "label.users": [ + { + "type": 0, + "value": "Usuarios" + } + ], + "label.view": [ + { + "type": 0, + "value": "Visualizar" + } + ], + "label.view-details": [ + { + "type": 0, + "value": "Ver detalles" + } + ], + "label.view-only": [ + { + "type": 0, + "value": "Ver sólo" + } + ], + "label.views": [ + { + "type": 0, + "value": "Vistas" + } + ], + "label.visitors": [ + { + "type": 0, + "value": "Visitantes" + } + ], + "label.website": [ + { + "type": 0, + "value": "Sitio web" + } + ], + "label.website-id": [ + { + "type": 0, + "value": "ID del sitio web" + } + ], + "label.websites": [ + { + "type": 0, + "value": "Sitios web" + } + ], + "label.window": [ + { + "type": 0, + "value": "Ventana" + } + ], + "label.yesterday": [ + { + "type": 0, + "value": "Ayer" + } + ], + "labels.after": [ + { + "type": 0, + "value": "Después" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Media" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Antes" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Desglose" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contiene" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Crear reporte" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Descripciones" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "No contiene" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "No es igual a" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Es igual a" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filtros" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Mayor que" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Mayor que o igual a" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Menor que" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Menor que o igual a" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Máx" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Mín" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Resumen" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Suma" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total de registros" + } + ], + "labels.true": [ + { + "type": 0, + "value": "Verdadero" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Tipo" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Único" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Sin título" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Valor" + } + ], + "message.active-users": [ + { + "type": 1, + "value": "x" + }, + { + "type": 0, + "value": " " + }, + { + "offset": 0, + "options": { + "one": { + "value": [ + { + "type": 0, + "value": "activo" + } + ] + }, + "other": { + "value": [ + { + "type": 0, + "value": "activos" + } + ] + } + }, + "pluralType": "cardinal", + "type": 6, + "value": "x" + } + ], + "message.confirm-delete": [ + { + "type": 0, + "value": "¿Seguro que quieres eliminar " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "?" + } + ], + "message.confirm-leave": [ + { + "type": 0, + "value": "¿Seguro que quieres abandonar " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "?" + } + ], + "message.confirm-reset": [ + { + "type": 0, + "value": "¿Seguro que quieres BORRAR las analíticas de " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "?" + } + ], + "message.delete-account": [ + { + "type": 0, + "value": "Para borrar esta cuenta, escribe " + }, + { + "type": 1, + "value": "confirmation" + }, + { + "type": 0, + "value": " a continuación para confirmar." + } + ], + "message.delete-website": [ + { + "type": 0, + "value": "Para borrar este sitio web, escribe " + }, + { + "type": 1, + "value": "confirmation" + }, + { + "type": 0, + "value": " a continuación para confirmar." + } + ], + "message.delete-website-warning": [ + { + "type": 0, + "value": "Toda la información relacionada será eliminada." + } + ], + "message.error": [ + { + "type": 0, + "value": "Algo falló." + } + ], + "message.event-log": [ + { + "type": 1, + "value": "event" + }, + { + "type": 0, + "value": " en " + }, + { + "type": 1, + "value": "url" + } + ], + "message.go-to-settings": [ + { + "type": 0, + "value": "Ir a la configuración" + } + ], + "message.incorrect-username-password": [ + { + "type": 0, + "value": "Nombre de usuario o contraseña incorrectos." + } + ], + "message.invalid-domain": [ + { + "type": 0, + "value": "Dominio inválido" + } + ], + "message.min-password-length": [ + { + "type": 0, + "value": "Longitud mínima de " + }, + { + "type": 1, + "value": "n" + }, + { + "type": 0, + "value": " caracteres" + } + ], + "message.no-data-available": [ + { + "type": 0, + "value": "No hay información disponible." + } + ], + "message.no-event-data": [ + { + "type": 0, + "value": "No hay datos de eventos disponibles." + } + ], + "message.no-match-password": [ + { + "type": 0, + "value": "Las contraseñas no coinciden" + } + ], + "message.no-teams": [ + { + "type": 0, + "value": "No has creado ningún equipo." + } + ], + "message.no-users": [ + { + "type": 0, + "value": "No hay usuarios." + } + ], + "message.page-not-found": [ + { + "type": 0, + "value": "Página no encontrada" + } + ], + "message.reset-website": [ + { + "type": 0, + "value": "Para reiniciar este sitio web, escribe " + }, + { + "type": 1, + "value": "confirmation" + }, + { + "type": 0, + "value": " a continuación para confirmar." + } + ], + "message.reset-website-warning": [ + { + "type": 0, + "value": "Todas las estadísticas de esta página serán eliminadas, pero el código de rastreo permanecerá intacto." + } + ], + "message.saved": [ + { + "type": 0, + "value": "Guardado." + } + ], + "message.share-url": [ + { + "type": 0, + "value": "Esta es la URL pública para " + }, + { + "type": 1, + "value": "target" + }, + { + "type": 0, + "value": "." + } + ], + "message.team-already-member": [ + { + "type": 0, + "value": "Ya eres miembro de este equipo." + } + ], + "message.team-not-found": [ + { + "type": 0, + "value": "Equipo no encontrado." + } + ], + "message.tracking-code": [ + { + "type": 0, + "value": "Código de rastreo" + } + ], + "message.user-deleted": [ + { + "type": 0, + "value": "Usuario eliminado." + } + ], + "message.visitor-log": [ + { + "type": 0, + "value": "Visitante desde " + }, + { + "type": 1, + "value": "country" + }, + { + "type": 0, + "value": " usando " + }, + { + "type": 1, + "value": "browser" + }, + { + "type": 0, + "value": " en " + }, + { + "type": 1, + "value": "os" + }, + { + "type": 0, + "value": " " + }, + { + "type": 1, + "value": "device" + } + ], + "messages.no-results-found": [ + { + "type": 0, + "value": "No se encontraron resultados." + } + ], + "messages.no-team-websites": [ + { + "type": 0, + "value": "Este equipo no tiene ningún sitio web configurado." + } + ], + "messages.no-websites-configured": [ + { + "type": 0, + "value": "No tienes ningún sitio web configurado." + } + ], + "messages.team-websites-info": [ + { + "type": 0, + "value": "Las analíticas de tus sitios web pueden ser vistas por cualquier miembro del equipo." + } + ] +} diff --git a/public/intl/messages/es-MX.json b/public/intl/messages/es-MX.json index 48d54fe9..d754cff4 100644 --- a/public/intl/messages/es-MX.json +++ b/public/intl/messages/es-MX.json @@ -17,6 +17,18 @@ "value": "Registro de actividad" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Habilitar compartir URL" } ], + "label.event": [ + { + "type": 0, + "value": "Evento" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Rol" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Desconocida" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Ver detalles" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Sitios" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ayer" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "No hay información disponible." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/fa-IR.json b/public/intl/messages/fa-IR.json index f41a80a4..ca7669f5 100644 --- a/public/intl/messages/fa-IR.json +++ b/public/intl/messages/fa-IR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "فعال کردن اشتراک گذاری URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "رویدادها" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "ناشناخته" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "مشاهده‌ی جزئیات" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "وب‌سایت‌ها" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "اطلاعاتی موجود نیست." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/fi-FI.json b/public/intl/messages/fi-FI.json index fa70253a..939d1be0 100644 --- a/public/intl/messages/fi-FI.json +++ b/public/intl/messages/fi-FI.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Ota jakamisen URL-osoite käyttöön" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Tapahtumat" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Tuntematon" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Katso tiedot" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Verkkosivut" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Tietoja ei ole käytettävissä." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/fo-FO.json b/public/intl/messages/fo-FO.json index 0b5b66f1..c403c2da 100644 --- a/public/intl/messages/fo-FO.json +++ b/public/intl/messages/fo-FO.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Virkja deili leinki" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Hendingar/tiltøk" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Ókent" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vís frágreiðing" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Heimasíður" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Einki data tøk." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/fr-FR.json b/public/intl/messages/fr-FR.json index 0251929e..52fedba2 100644 --- a/public/intl/messages/fr-FR.json +++ b/public/intl/messages/fr-FR.json @@ -17,6 +17,18 @@ "value": "Journal d'activité" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Activer l'URL de partage" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Événements" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Rôle" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "Inconnu" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "Voir les détails" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "Sites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Hier" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -915,6 +1131,12 @@ "value": "Aucune donnée disponible." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ga-ES.json b/public/intl/messages/ga-ES.json index 2d4fb153..09ca313a 100644 --- a/public/intl/messages/ga-ES.json +++ b/public/intl/messages/ga-ES.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Activar URL de compartición" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -531,6 +561,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -687,6 +723,12 @@ "value": "Descoñecido" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -723,6 +765,12 @@ "value": "Ver detalles" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -753,12 +801,180 @@ "value": "Sitios web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -927,6 +1143,12 @@ "value": "Sen datos dispoñibles." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/he-IL.json b/public/intl/messages/he-IL.json index ca5b8e2b..e44e9749 100644 --- a/public/intl/messages/he-IL.json +++ b/public/intl/messages/he-IL.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "הפעלת URL שיתוף" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "אירועים" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "לא ידוע" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "פרטים נוספים" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "אתרים" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -911,6 +1127,12 @@ "value": "אין מידע זמין" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/hi-IN.json b/public/intl/messages/hi-IN.json index 1eb32bf9..e56f51a0 100644 --- a/public/intl/messages/hi-IN.json +++ b/public/intl/messages/hi-IN.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "शेयर URL सक्षम करें" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "स्पर्धाएँ" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "अज्ञात" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "विवरण देखें" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "वेबसाइटों" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "कोई डेटा उपलब्ध नहीं है।" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/hr-HR.json b/public/intl/messages/hr-HR.json index 9a085047..b0cf339c 100644 --- a/public/intl/messages/hr-HR.json +++ b/public/intl/messages/hr-HR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Omogući dijeljenje poveznice" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Nepoznato" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Pogledaj detalje" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Web stranice" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Jučer" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Nema dostupnih podataka." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/hu-HU.json b/public/intl/messages/hu-HU.json index 502e55e1..8f799db9 100644 --- a/public/intl/messages/hu-HU.json +++ b/public/intl/messages/hu-HU.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "URL-megosztás engedélyezése" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Események" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Ismeretlen" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Részletek" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Weboldalak" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Nincs rendelkezésre álló adat." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/id-ID.json b/public/intl/messages/id-ID.json index b19e5f73..6de4be0b 100644 --- a/public/intl/messages/id-ID.json +++ b/public/intl/messages/id-ID.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktifkan URL berbagi" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Perihal" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "Tidak diketahui" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "Lihat Detil" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "Situs web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -887,6 +1103,12 @@ "value": "Tidak ada data." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/it-IT.json b/public/intl/messages/it-IT.json index b5f7c14d..1095c0d5 100644 --- a/public/intl/messages/it-IT.json +++ b/public/intl/messages/it-IT.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Abilita URL di condivisione" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventi" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Sconosciuto" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vedi dettagli" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Siti web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ieri" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Nessun dato disponibile." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ja-JP.json b/public/intl/messages/ja-JP.json index febaa8de..a20da939 100644 --- a/public/intl/messages/ja-JP.json +++ b/public/intl/messages/ja-JP.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "共有リンクを有効にする" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "イベント" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -527,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -683,6 +719,12 @@ "value": "不明" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -719,6 +761,12 @@ "value": "詳細を見る" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -749,12 +797,180 @@ "value": "Webサイト" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -895,6 +1111,12 @@ "value": "データがありません。" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/km-KH.json b/public/intl/messages/km-KH.json index 7200d49d..4bfacf31 100644 --- a/public/intl/messages/km-KH.json +++ b/public/intl/messages/km-KH.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "បើកការចែករំលែក URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "ព្រឹត្តិការណ៍" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "មិនស្គាល់" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "មើលព័ត៌មានលម្អិត" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "គេហទំព័រ" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "ម្សិលមិញ" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -891,6 +1107,12 @@ "value": "មិនមានទិន្នន័យទេ។" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ko-KR.json b/public/intl/messages/ko-KR.json index c2c879d8..2a783f85 100644 --- a/public/intl/messages/ko-KR.json +++ b/public/intl/messages/ko-KR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "URL 공유 활성화" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "이벤트" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -527,6 +557,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -683,6 +719,12 @@ "value": "알 수 없음" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -719,6 +761,12 @@ "value": "상세보기" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -749,12 +797,180 @@ "value": "웹사이트" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -895,6 +1111,12 @@ "value": "사용 가능한 데이터가 없습니다." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/lt-LT.json b/public/intl/messages/lt-LT.json index 21becd38..f741f294 100644 --- a/public/intl/messages/lt-LT.json +++ b/public/intl/messages/lt-LT.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Įjungti bendrinimą su nuoroda" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Įvykiai" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -628,6 +658,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -784,6 +820,12 @@ "value": "Nežinoma" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -820,6 +862,12 @@ "value": "Peržiūrėti detaliau" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -850,12 +898,180 @@ "value": "Svetainės" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "offset": 0, @@ -1044,6 +1260,12 @@ "value": "Nėra jokių duomenų." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/mn-MN.json b/public/intl/messages/mn-MN.json index 2638ee43..32c8d26f 100644 --- a/public/intl/messages/mn-MN.json +++ b/public/intl/messages/mn-MN.json @@ -17,6 +17,18 @@ "value": "Үйл ажиллагааны бүртгэл" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Хуваалцах холбоос идэвхжүүлэх" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Үйлдэл" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Эрх" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Тодорхойгүй" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Дэлгэрүүлж харах" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Вебүүд" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Өчигдөр" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -927,6 +1143,12 @@ "value": "Өгөгдөл алга." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ms-MY.json b/public/intl/messages/ms-MY.json index bf2aef02..da386635 100644 --- a/public/intl/messages/ms-MY.json +++ b/public/intl/messages/ms-MY.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktifkan url berkongsi" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Peristiwa" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "Tidak diketahui" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "Lihat butiran" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "Laman web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -911,6 +1127,12 @@ "value": "Tiada data yang boleh didapati." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/nb-NO.json b/public/intl/messages/nb-NO.json index ee95b9c5..a3cdc8c4 100644 --- a/public/intl/messages/nb-NO.json +++ b/public/intl/messages/nb-NO.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktiver delings-URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Arrangementer" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Ukjent" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vis detaljer" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Nettsteder" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Ingen data tilgjengelig." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/nl-NL.json b/public/intl/messages/nl-NL.json index 149f095b..97719f38 100644 --- a/public/intl/messages/nl-NL.json +++ b/public/intl/messages/nl-NL.json @@ -17,6 +17,18 @@ "value": "Activiteiten logboek" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Sta delen via openbare URL toe" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Gebeurtenissen" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Gebruikersrol" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Onbekend" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Meer details" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Gisteren" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Geen gegevens beschikbaar." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/pl-PL.json b/public/intl/messages/pl-PL.json index ed2c711e..9ea33eb8 100644 --- a/public/intl/messages/pl-PL.json +++ b/public/intl/messages/pl-PL.json @@ -17,6 +17,18 @@ "value": "Dziennik aktywności" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Włącz udostępnianie adresu URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Zdarzenia" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Nieznany" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Pokaż szczegóły" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Witryny" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Wczoraj" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Brak dostępnych danych." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, @@ -946,7 +1168,7 @@ "message.reset-website": [ { "type": 0, - "value": "To reset this website, type " + "value": "Aby zresetować tę witrynę, wpisz " }, { "type": 1, @@ -954,7 +1176,7 @@ }, { "type": 0, - "value": " in the box below to confirm." + "value": " w polu poniżej, aby potwierdzić." } ], "message.reset-website-warning": [ diff --git a/public/intl/messages/pt-BR.json b/public/intl/messages/pt-BR.json index d19c9ab2..6dec1b79 100644 --- a/public/intl/messages/pt-BR.json +++ b/public/intl/messages/pt-BR.json @@ -17,6 +17,18 @@ "value": "Log de atividade" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Ativar link de compartilhamento" } ], + "label.event": [ + { + "type": 0, + "value": "Evento" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Papel" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Desconhecido" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Ver detalhes" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Sites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Ontem" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Sem dados disponíveis." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/pt-PT.json b/public/intl/messages/pt-PT.json index e36b5f26..5ad27300 100644 --- a/public/intl/messages/pt-PT.json +++ b/public/intl/messages/pt-PT.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Ativar link de partilha" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Eventos" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Desconhecido" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Ver detalhes" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Sem dados disponíveis." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ro-RO.json b/public/intl/messages/ro-RO.json index 47984700..346a314f 100644 --- a/public/intl/messages/ro-RO.json +++ b/public/intl/messages/ro-RO.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Activare adresă URL de distribuire" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Evenimente" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Necunoscut" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Vizualizare detalii" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Site-uri web" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Nici o informație disponibilă." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ru-RU.json b/public/intl/messages/ru-RU.json index d15b9fac..ee5c1ce7 100644 --- a/public/intl/messages/ru-RU.json +++ b/public/intl/messages/ru-RU.json @@ -17,6 +17,18 @@ "value": "Журнал активности" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Разрешить делиться ссылкой" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "События" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Роль" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Неизвестно" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Посмотреть детали" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Сайты" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Вчера" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -887,6 +1103,12 @@ "value": "Нет данных." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/si-LK.json b/public/intl/messages/si-LK.json index e12f3008..9513703c 100644 --- a/public/intl/messages/si-LK.json +++ b/public/intl/messages/si-LK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "බෙදාගැනීමේ URL සබල කරන්න" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Events" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "නොදනී" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "තොරතුරු පෙන්වන්න" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "වෙබ් අඩවි" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "ඊයේ" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -911,6 +1127,12 @@ "value": "පෙන්වීමට දත්ත නොමැත." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/sk-SK.json b/public/intl/messages/sk-SK.json index e475e20f..c449dad1 100644 --- a/public/intl/messages/sk-SK.json +++ b/public/intl/messages/sk-SK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Povoliť zdielanie URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Udalosti" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Neznámý" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Zobraziť detaily" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Weby" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Žiadne data." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/sl-SI.json b/public/intl/messages/sl-SI.json index d358eaaa..7bc3fd12 100644 --- a/public/intl/messages/sl-SI.json +++ b/public/intl/messages/sl-SI.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Omogoči URL za skupno rabo" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Dogodki" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Neznano" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Prikaži podrobnosti" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Spletna mesta" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "Podatki niso na voljo." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/sv-SE.json b/public/intl/messages/sv-SE.json index dc9ee53c..f602dac9 100644 --- a/public/intl/messages/sv-SE.json +++ b/public/intl/messages/sv-SE.json @@ -17,6 +17,18 @@ "value": "Aktivitetslogg" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Aktivera delnings-URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Händelser" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Roll" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Okänd" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Visa detaljer" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Webbsajt" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Igår" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -923,6 +1139,12 @@ "value": "Ingen data tillgänglig." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ta-IN.json b/public/intl/messages/ta-IN.json index 3f4f03b5..3ce80804 100644 --- a/public/intl/messages/ta-IN.json +++ b/public/intl/messages/ta-IN.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "கள முகவரியை பகிரலாம்" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "நிகழ்வுகள்" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "தெரியாத" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "விபரங்களை பார்" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "வலைத்தளங்கள்" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "தரவு எதுவும் கிடைக்கவில்லை." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/th-TH.json b/public/intl/messages/th-TH.json index b8b9e46f..bbf90921 100644 --- a/public/intl/messages/th-TH.json +++ b/public/intl/messages/th-TH.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "เปิดใช้งานการแชร์ลิงก์" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "เหตุการณ์" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "ไม่รู้จัก" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "แสดงรายละเอียด" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "เว็บไซต์" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -915,6 +1131,12 @@ "value": "ไม่มีข้อมูล." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/tr-TR.json b/public/intl/messages/tr-TR.json index 4fc75603..6767fb3e 100644 --- a/public/intl/messages/tr-TR.json +++ b/public/intl/messages/tr-TR.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Anonim paylaşım URL'i aktif" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Olaylar" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Bilinmeyen" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Detayı incele" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Web siteleri" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -891,6 +1107,12 @@ "value": "Henüz hiç veri yok." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/uk-UA.json b/public/intl/messages/uk-UA.json index 7ff7f5d0..9db43618 100644 --- a/public/intl/messages/uk-UA.json +++ b/public/intl/messages/uk-UA.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Дозволити ділитися посиланням" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Події" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "Невідомо" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "Переглянути деталі" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "Сайти" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -895,6 +1111,12 @@ "value": "Немає даних." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/ur-PK.json b/public/intl/messages/ur-PK.json index 196d62c6..d79bfdf1 100644 --- a/public/intl/messages/ur-PK.json +++ b/public/intl/messages/ur-PK.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "شیئر یو آر ایل کو فعال کریں" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "واقعات" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "نامعلوم" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "تفصیلات دیکھیں" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "ویب سائٹس" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -919,6 +1135,12 @@ "value": "مواد موجود نہیں ہے." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/vi-VN.json b/public/intl/messages/vi-VN.json index 2a432b00..8b363197 100644 --- a/public/intl/messages/vi-VN.json +++ b/public/intl/messages/vi-VN.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "Bật khả năng chia sẻ URL" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "Sự kiện" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -515,6 +545,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -671,6 +707,12 @@ "value": "Không rõ" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -707,6 +749,12 @@ "value": "Xem chi tiết" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -737,12 +785,180 @@ "value": "Websites" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 1, @@ -911,6 +1127,12 @@ "value": "Không có dữ liệu." } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/zh-CN.json b/public/intl/messages/zh-CN.json index 075cbf72..55eb231f 100644 --- a/public/intl/messages/zh-CN.json +++ b/public/intl/messages/zh-CN.json @@ -17,6 +17,18 @@ "value": "活动日志" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "启用共享链接" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "行为类别" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -527,6 +557,12 @@ "value": "角色" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -683,6 +719,12 @@ "value": "未知" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -719,6 +761,12 @@ "value": "查看更多" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -749,12 +797,180 @@ "value": "网站" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "昨天" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -903,6 +1119,12 @@ "value": "无可用数据。" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/public/intl/messages/zh-TW.json b/public/intl/messages/zh-TW.json index 63d9a69e..fa0f5e99 100644 --- a/public/intl/messages/zh-TW.json +++ b/public/intl/messages/zh-TW.json @@ -17,6 +17,18 @@ "value": "Activity log" } ], + "label.add": [ + { + "type": 0, + "value": "Add" + } + ], + "label.add-description": [ + { + "type": 0, + "value": "Add description" + } + ], "label.add-website": [ { "type": 0, @@ -245,6 +257,12 @@ "value": "啟用分享連結" } ], + "label.event": [ + { + "type": 0, + "value": "Event" + } + ], "label.event-data": [ { "type": 0, @@ -257,6 +275,18 @@ "value": "行為類別" } ], + "label.field": [ + { + "type": 0, + "value": "Field" + } + ], + "label.fields": [ + { + "type": 0, + "value": "Fields" + } + ], "label.filter-combined": [ { "type": 0, @@ -523,6 +553,12 @@ "value": "Role" } ], + "label.run-query": [ + { + "type": 0, + "value": "Run query" + } + ], "label.save": [ { "type": 0, @@ -679,6 +715,12 @@ "value": "未知" } ], + "label.url": [ + { + "type": 0, + "value": "URL" + } + ], "label.urls": [ { "type": 0, @@ -715,6 +757,12 @@ "value": "查看更多" } ], + "label.view-only": [ + { + "type": 0, + "value": "View only" + } + ], "label.views": [ { "type": 0, @@ -745,12 +793,180 @@ "value": "網站" } ], + "label.window": [ + { + "type": 0, + "value": "Window" + } + ], "label.yesterday": [ { "type": 0, "value": "Yesterday" } ], + "labels.after": [ + { + "type": 0, + "value": "After" + } + ], + "labels.average": [ + { + "type": 0, + "value": "Average" + } + ], + "labels.before": [ + { + "type": 0, + "value": "Before" + } + ], + "labels.breakdown": [ + { + "type": 0, + "value": "Breakdown" + } + ], + "labels.contains": [ + { + "type": 0, + "value": "Contains" + } + ], + "labels.create-report": [ + { + "type": 0, + "value": "Create report" + } + ], + "labels.description": [ + { + "type": 0, + "value": "Description" + } + ], + "labels.does-not-contain": [ + { + "type": 0, + "value": "Does not contain" + } + ], + "labels.does-not-equal": [ + { + "type": 0, + "value": "Does not equal" + } + ], + "labels.equals": [ + { + "type": 0, + "value": "Equals" + } + ], + "labels.false": [ + { + "type": 0, + "value": "False" + } + ], + "labels.filters": [ + { + "type": 0, + "value": "Filters" + } + ], + "labels.greater-than": [ + { + "type": 0, + "value": "Greater than" + } + ], + "labels.greater-than-equals": [ + { + "type": 0, + "value": "Greater than or equals" + } + ], + "labels.less-than": [ + { + "type": 0, + "value": "Less than" + } + ], + "labels.less-than-equals": [ + { + "type": 0, + "value": "Less than or equals" + } + ], + "labels.max": [ + { + "type": 0, + "value": "Max" + } + ], + "labels.min": [ + { + "type": 0, + "value": "Min" + } + ], + "labels.overview": [ + { + "type": 0, + "value": "Overview" + } + ], + "labels.sum": [ + { + "type": 0, + "value": "Sum" + } + ], + "labels.total": [ + { + "type": 0, + "value": "Total" + } + ], + "labels.total-records": [ + { + "type": 0, + "value": "Total records" + } + ], + "labels.true": [ + { + "type": 0, + "value": "True" + } + ], + "labels.type": [ + { + "type": 0, + "value": "Type" + } + ], + "labels.unique": [ + { + "type": 0, + "value": "Unique" + } + ], + "labels.untitled": [ + { + "type": 0, + "value": "Untitled" + } + ], + "labels.value": [ + { + "type": 0, + "value": "Value" + } + ], "message.active-users": [ { "type": 0, @@ -899,6 +1115,12 @@ "value": "無可用數據。" } ], + "message.no-event-data": [ + { + "type": 0, + "value": "No event data is available." + } + ], "message.no-match-password": [ { "type": 0, diff --git a/queries/admin/team.ts b/queries/admin/team.ts index b965119b..6d216639 100644 --- a/queries/admin/team.ts +++ b/queries/admin/team.ts @@ -1,7 +1,7 @@ import { Prisma, Team, TeamWebsite } from '@prisma/client'; import prisma from 'lib/prisma'; -import { uuid } from 'lib/crypto'; import { ROLES } from 'lib/constants'; +import { uuid } from 'next-basics'; export async function getTeam(where: Prisma.TeamWhereInput): Promise { return prisma.client.team.findFirst({ diff --git a/queries/admin/teamUser.ts b/queries/admin/teamUser.ts index b1c295be..5bce2926 100644 --- a/queries/admin/teamUser.ts +++ b/queries/admin/teamUser.ts @@ -1,5 +1,5 @@ import { Prisma, TeamUser } from '@prisma/client'; -import { uuid } from 'lib/crypto'; +import { uuid } from 'next-basics'; import prisma from 'lib/prisma'; export async function getTeamUserById(teamUserId: string): Promise { diff --git a/queries/admin/teamWebsite.ts b/queries/admin/teamWebsite.ts index 0aedc3c7..9ffd07d3 100644 --- a/queries/admin/teamWebsite.ts +++ b/queries/admin/teamWebsite.ts @@ -1,6 +1,6 @@ import { Prisma, Team, TeamUser, TeamWebsite, Website } from '@prisma/client'; import { ROLES } from 'lib/constants'; -import { uuid } from 'lib/crypto'; +import { uuid } from 'next-basics'; import prisma from 'lib/prisma'; export async function getTeamWebsite( diff --git a/queries/admin/user.ts b/queries/admin/user.ts index c4a5150c..cab8a562 100644 --- a/queries/admin/user.ts +++ b/queries/admin/user.ts @@ -73,7 +73,64 @@ export async function getUserTeams(userId: string): Promise< }); } -export async function getUserWebsites(userId: string): Promise { +export async function getUserWebsites( + userId: string, + options?: { includeTeams: boolean }, +): Promise { + const { rawQuery } = prisma; + + if (options?.includeTeams) { + const websites = await rawQuery( + ` + select + website_id as "id", + name, + domain, + share_id as "shareId", + reset_at as "resetAt", + user_id as "userId", + created_at as "createdAt", + updated_at as "updatedAt", + deleted_at as "deletedAt", + null as "teamId", + null as "teamName" + from website + where user_id = {{userId::uuid}} + and deleted_at is null + union + select + w.website_id as "id", + w.name, + w.domain, + w.share_id as "shareId", + w.reset_at as "resetAt", + w.user_id as "userId", + w.created_at as "createdAt", + w.updated_at as "updatedAt", + w.deleted_at as "deletedAt", + t.team_id as "teamId", + t.name as "teamName" + from website w + inner join team_website tw + on tw.website_id = w.website_id + inner join team t + on t.team_id = tw.team_id + inner join team_user tu + on tu.team_id = tw.team_id + where tu.user_id = {{userId::uuid}} + and w.deleted_at is null + `, + { userId }, + ); + + return websites.reduce((arr, item) => { + if (!arr.find(({ id }) => id === item.id)) { + return arr.concat(item); + } + return arr; + }, []); + } + return prisma.client.website.findMany({ where: { userId, diff --git a/queries/analytics/eventData/getEventDataEvents.ts b/queries/analytics/eventData/getEventDataEvents.ts new file mode 100644 index 00000000..7a926eaf --- /dev/null +++ b/queries/analytics/eventData/getEventDataEvents.ts @@ -0,0 +1,120 @@ +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import { WebsiteEventDataFields } from 'lib/types'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; + +export async function getEventDataEvents( + ...args: [ + websiteId: string, + startDate: Date, + endDate: Date, + filters: { field?: string; event?: string }, + ] +): Promise { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery( + websiteId: string, + startDate: Date, + endDate: Date, + filters: { field?: string; event?: string }, +) { + const { rawQuery } = prisma; + const website = await loadWebsite(websiteId); + const { field, event } = filters; + + if (event) { + return rawQuery( + ` + select + we.event_name as event, + ed.event_key as field, + ed.string_value as value, + count(ed.*) as total + from event_data as ed + inner join website_event as we + on we.event_id = ed.website_event_id + where ed.website_id = {{websiteId:uuid}} + and ed.event_key = {{field}} + and ed.created_at between {{startDate}} and {{endDate}} + and we.event_name = {{event}} + group by ed.event_key, ed.string_value + order by 3 desc, 2 desc, 1 asc + `, + { ...filters, websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, + ); + } + return rawQuery( + ` + select + we.event_name as event, + ed.event_key as field, + ed.string_value as value, + count(ed.*) as total + from event_data as ed + inner join website_event as we + on we.event_id = ed.website_event_id + where ed.website_id = {{websiteId::uuid}} + and ed.event_key = {{field}} + and ed.created_at between {{startDate}} and {{endDate}} + group by we.event_name, ed.event_key, ed.string_value + order by 3 desc, 2 desc, 1 asc + `, + { websiteId, field, startDate: maxDate(startDate, website.resetAt), endDate }, + ); +} + +async function clickhouseQuery( + websiteId: string, + startDate: Date, + endDate: Date, + filters: { field?: string; event?: string }, +) { + const { rawQuery } = clickhouse; + const website = await loadWebsite(websiteId); + const { event } = filters; + + if (event) { + return rawQuery( + ` + select + event_name as event, + event_key as field, + data_type as type, + string_value as value, + count(*) as total + from event_data + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_name = {event:String} + group by event_key, data_type, string_value, event_name + order by 1 asc, 2 asc, 3 asc, 4 desc + limit 100 + `, + { ...filters, websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, + ); + } + + return rawQuery( + ` + select + event_name as event, + event_key as field, + data_type as type, + count(*) as total + from event_data + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + group by event_key, data_type, event_name + order by 1 asc, 2 asc + limit 100 + `, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, + ); +} diff --git a/queries/analytics/eventData/getEventDataFields.ts b/queries/analytics/eventData/getEventDataFields.ts index 6306d239..516c58d0 100644 --- a/queries/analytics/eventData/getEventDataFields.ts +++ b/queries/analytics/eventData/getEventDataFields.ts @@ -2,8 +2,8 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import { WebsiteEventDataFields } from 'lib/types'; -import { loadWebsite } from 'lib/query'; -import { DEFAULT_CREATED_AT } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getEventDataFields( ...args: [websiteId: string, startDate: Date, endDate: Date, field?: string] @@ -15,82 +15,81 @@ export async function getEventDataFields( } async function relationalQuery(websiteId: string, startDate: Date, endDate: Date, field: string) { - const { toUuid, rawQuery } = prisma; + const { rawQuery } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); if (field) { return rawQuery( - `select event_key as field, - string_value as value, - count(*) as total - from event_data - where website_id = $1${toUuid()} - and event_key = $2 - and created_at >= $3 - and created_at between $4 and $5 - group by event_key, string_value - order by 3 desc, 2 desc, 1 asc - limit 100 + ` + select + event_key as field, + string_value as value, + count(*) as total + from event_data + where website_id = {{websiteId::uuid}} + and event_key = {{field}} + and created_at between {{startDate}} and {{endDate}} + group by event_key, string_value + order by 3 desc, 2 desc, 1 asc + limit 100 `, - [websiteId, field, resetDate, startDate, endDate] as any, + { websiteId, field, startDate: maxDate(startDate, website.resetAt), endDate }, ); } return rawQuery( - `select - event_key as field, - data_type as type, - count(*) as total - from event_data - where website_id = $1${toUuid()} - and created_at >= $2 - and created_at between $3 and $4 - group by event_key, data_type - order by 3 desc, 2 asc, 1 asc - limit 100 + ` + select + event_key as field, + data_type as type, + count(*) as total + from event_data + where website_id = {{websiteId::uuid}} + and created_at between {{startDate}} and {{endDate}} + group by event_key, data_type + order by 3 desc, 2 asc, 1 asc + limit 100 `, - [websiteId, resetDate, startDate, endDate] as any, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, ); } async function clickhouseQuery(websiteId: string, startDate: Date, endDate: Date, field: string) { - const { rawQuery, getDateFormat, getBetweenDates } = clickhouse; + const { rawQuery } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); if (field) { return rawQuery( - `select + ` + select event_key as field, string_value as value, count(*) as total - from event_data - where website_id = {websiteId:UUID} - and event_key = {field:String} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - group by event_key, string_value - order by 3 desc, 2 desc, 1 asc - limit 100 - `, - { websiteId, field }, + from event_data + where website_id = {websiteId:UUID} + and event_key = {field:String} + and created_at between {startDate:DateTime} and {endDate:DateTime} + group by event_key, string_value + order by 3 desc, 2 desc, 1 asc + limit 100 + `, + { websiteId, field, startDate: maxDate(startDate, website.resetAt), endDate }, ); } return rawQuery( - `select - event_key as field, - data_type as type, - count(*) as total - from event_data - where website_id = {websiteId:UUID} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - group by event_key, data_type - order by 3 desc, 2 asc, 1 asc - limit 100 + ` + select + event_key as field, + data_type as type, + count(*) as total + from event_data + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + group by event_key, data_type + order by 3 desc, 2 asc, 1 asc + limit 100 `, - { websiteId }, + { websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, ); } diff --git a/queries/analytics/eventData/getEventDataUsage.ts b/queries/analytics/eventData/getEventDataUsage.ts index 5d470c3c..78bf7c91 100644 --- a/queries/analytics/eventData/getEventDataUsage.ts +++ b/queries/analytics/eventData/getEventDataUsage.ts @@ -1,28 +1,26 @@ import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from 'lib/db'; export function getEventDataUsage(...args: [websiteIds: string[], startDate: Date, endDate: Date]) { return runQuery({ - [PRISMA]: () => relationalQuery(...args), + [PRISMA]: notImplemented, [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteIds: string[], startDate: Date, endDate: Date) { - throw new Error('Not Implemented'); -} - function clickhouseQuery(websiteIds: string[], startDate: Date, endDate: Date) { const { rawQuery } = clickhouse; return rawQuery( - `select - website_id as websiteId, - count(*) as count + ` + select + website_id as websiteId, + count(*) as count from event_data where created_at between {startDate:DateTime64} and {endDate:DateTime64} - and website_id in {websiteIds:Array(UUID)} - group by website_id`, + and website_id in {websiteIds:Array(UUID)} + group by website_id + `, { websiteIds, startDate, diff --git a/queries/analytics/eventData/saveEventData.ts b/queries/analytics/eventData/saveEventData.ts index f30ceb90..50765229 100644 --- a/queries/analytics/eventData/saveEventData.ts +++ b/queries/analytics/eventData/saveEventData.ts @@ -1,6 +1,6 @@ import { Prisma } from '@prisma/client'; import { DATA_TYPE } from 'lib/constants'; -import { uuid } from 'lib/crypto'; +import { uuid } from 'next-basics'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import { flattenJSON } from 'lib/dynamicData'; import kafka from 'lib/kafka'; @@ -31,7 +31,7 @@ async function relationalQuery(data: { const jsonKeys = flattenJSON(eventData); - //id, websiteEventId, eventStringValue + // id, websiteEventId, eventStringValue const flattendData = jsonKeys.map(a => ({ id: uuid(), websiteEventId: eventId, @@ -76,7 +76,9 @@ async function clickhouseQuery(data: { event_name: eventName, event_key: a.key, string_value: - a.dynamicDataType === DATA_TYPE.date ? getDateFormat(a.value, 'isoUtcDateTime') : a.value, + a.dynamicDataType === DATA_TYPE.date + ? getDateFormat(a.value, 'isoUtcDateTime') + : a.value.toString(), number_value: a.dynamicDataType === DATA_TYPE.number ? a.value : null, date_value: a.dynamicDataType === DATA_TYPE.date ? getDateFormat(a.value) : null, data_type: a.dynamicDataType, diff --git a/queries/analytics/event/getEventMetrics.ts b/queries/analytics/events/getEventMetrics.ts similarity index 61% rename from queries/analytics/event/getEventMetrics.ts rename to queries/analytics/events/getEventMetrics.ts index ea05dae4..37044d1b 100644 --- a/queries/analytics/event/getEventMetrics.ts +++ b/queries/analytics/events/getEventMetrics.ts @@ -2,8 +2,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; import { WebsiteEventMetric } from 'lib/types'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { DEFAULT_RESET_DATE, EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getEventMetrics( ...args: [ @@ -45,26 +46,31 @@ async function relationalQuery( }; }, ) { - const { toUuid, rawQuery, getDateQuery, getFilterQuery } = prisma; + const { rawQuery, getDateQuery, getFilterQuery } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [websiteId, resetDate, startDate, endDate]; - const filterQuery = getFilterQuery(filters, params); + const filterQuery = getFilterQuery(filters); return rawQuery( - `select + ` + select event_name x, ${getDateQuery('created_at', unit, timezone)} t, count(*) y from website_event - where website_id = $1${toUuid()} - and created_at >= $2 - and created_at between $3 and $4 - and event_type = ${EVENT_TYPE.customEvent} + where website_id = {{websiteId::uuid}} + and created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} ${filterQuery} group by 1, 2 - order by 2`, - params, + order by 2 + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.customEvent, + }, ); } @@ -87,24 +93,30 @@ async function clickhouseQuery( }; }, ) { - const { rawQuery, getDateQuery, getDateFormat, getBetweenDates, getFilterQuery } = clickhouse; + const { rawQuery, getDateQuery, getFilterQuery } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; + const filterQuery = getFilterQuery(filters); return rawQuery( - `select + ` + select event_name x, ${getDateQuery('created_at', unit, timezone)} t, count(*) y from website_event where website_id = {websiteId:UUID} - and event_type = ${EVENT_TYPE.customEvent} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - ${getFilterQuery(filters, params)} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} + ${filterQuery} group by x, t - order by t`, - params, + order by t + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.customEvent, + }, ); } diff --git a/queries/analytics/event/getEventUsage.ts b/queries/analytics/events/getEventUsage.ts similarity index 51% rename from queries/analytics/event/getEventUsage.ts rename to queries/analytics/events/getEventUsage.ts index 1465264c..e8ed975f 100644 --- a/queries/analytics/event/getEventUsage.ts +++ b/queries/analytics/events/getEventUsage.ts @@ -1,28 +1,26 @@ import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import { CLICKHOUSE, PRISMA, runQuery, notImplemented } from 'lib/db'; export function getEventUsage(...args: [websiteIds: string[], startDate: Date, endDate: Date]) { return runQuery({ - [PRISMA]: () => relationalQuery(...args), + [PRISMA]: notImplemented, [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteIds: string[], startDate: Date, endDate: Date) { - throw new Error('Not Implemented'); -} - function clickhouseQuery(websiteIds: string[], startDate: Date, endDate: Date) { const { rawQuery } = clickhouse; return rawQuery( - `select - website_id as websiteId, - count(*) as count + ` + select + website_id as websiteId, + count(*) as count from website_event - where created_at between {startDate:DateTime64} and {endDate:DateTime64} - and website_id in {websiteIds:Array(UUID)} - group by website_id`, + where website_id in {websiteIds:Array(UUID)} + and created_at between {startDate:DateTime64} and {endDate:DateTime64} + group by website_id + `, { websiteIds, startDate, diff --git a/queries/analytics/event/getEvents.ts b/queries/analytics/events/getEvents.ts similarity index 63% rename from queries/analytics/event/getEvents.ts rename to queries/analytics/events/getEvents.ts index 8197019d..17528d66 100644 --- a/queries/analytics/event/getEvents.ts +++ b/queries/analytics/events/getEvents.ts @@ -2,30 +2,31 @@ import clickhouse from 'lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import prisma from 'lib/prisma'; -export function getEvents(...args: [websiteId: string, startAt: Date, eventType: number]) { +export function getEvents(...args: [websiteId: string, startDate: Date, eventType: number]) { return runQuery({ [PRISMA]: () => relationalQuery(...args), [CLICKHOUSE]: () => clickhouseQuery(...args), }); } -function relationalQuery(websiteId: string, startAt: Date, eventType: number) { +function relationalQuery(websiteId: string, startDate: Date, eventType: number) { return prisma.client.websiteEvent.findMany({ where: { websiteId, eventType, createdAt: { - gte: startAt, + gte: startDate, }, }, }); } -function clickhouseQuery(websiteId: string, startAt: Date, eventType: number) { +function clickhouseQuery(websiteId: string, startDate: Date, eventType: number) { const { rawQuery } = clickhouse; return rawQuery( - `select + ` + select event_id as id, website_id as websiteId, session_id as sessionId, @@ -35,12 +36,13 @@ function clickhouseQuery(websiteId: string, startAt: Date, eventType: number) { referrer_domain as referrerDomain, event_name as eventName from website_event - where event_type = {eventType:UInt32} - and website_id = {websiteId:UUID} - and created_at >= {startAt:DateTime('UTC')}`, + where website_id = {websiteId:UUID} + and created_at >= {startDate:DateTime} + and event_type = {eventType:UInt32} + `, { websiteId, - startAt, + startDate, eventType, }, ); diff --git a/queries/analytics/event/saveEvent.ts b/queries/analytics/events/saveEvent.ts similarity index 99% rename from queries/analytics/event/saveEvent.ts rename to queries/analytics/events/saveEvent.ts index 51087a59..cfefc326 100644 --- a/queries/analytics/event/saveEvent.ts +++ b/queries/analytics/events/saveEvent.ts @@ -2,7 +2,7 @@ import { EVENT_NAME_LENGTH, URL_LENGTH, EVENT_TYPE } from 'lib/constants'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import kafka from 'lib/kafka'; import prisma from 'lib/prisma'; -import { uuid } from 'lib/crypto'; +import { uuid } from 'next-basics'; import { saveEventData } from 'queries/analytics/eventData/saveEventData'; export async function saveEvent(args: { diff --git a/queries/analytics/pageview/getPageviewStats.ts b/queries/analytics/pageview/getPageviewStats.ts deleted file mode 100644 index 989a6d4d..00000000 --- a/queries/analytics/pageview/getPageviewStats.ts +++ /dev/null @@ -1,120 +0,0 @@ -import clickhouse from 'lib/clickhouse'; -import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; -import prisma from 'lib/prisma'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; - -export async function getPageviewStats( - ...args: [ - websiteId: string, - criteria: { - startDate: Date; - endDate: Date; - timezone?: string; - unit?: string; - count?: string; - filters: object; - sessionKey?: string; - }, - ] -) { - return runQuery({ - [PRISMA]: () => relationalQuery(...args), - [CLICKHOUSE]: () => clickhouseQuery(...args), - }); -} - -async function relationalQuery( - websiteId: string, - criteria: { - startDate: Date; - endDate: Date; - timezone?: string; - unit?: string; - count?: string; - filters: object; - sessionKey?: string; - }, -) { - const { - startDate, - endDate, - timezone = 'utc', - unit = 'day', - count = '*', - filters = {}, - sessionKey = 'session_id', - } = criteria; - const { toUuid, getDateQuery, parseFilters, rawQuery } = prisma; - const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [websiteId, resetDate, startDate, endDate]; - const { filterQuery, joinSession } = parseFilters(filters, params); - - return rawQuery( - `select ${getDateQuery('website_event.created_at', unit, timezone)} x, - count(${count !== '*' ? `${count}${sessionKey}` : count}) y - from website_event - ${joinSession} - where website_event.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 - and event_type = ${EVENT_TYPE.pageView} - ${filterQuery} - group by 1`, - params, - ); -} - -async function clickhouseQuery( - websiteId: string, - criteria: { - startDate: Date; - endDate: Date; - timezone?: string; - unit?: string; - count?: string; - filters: object; - sessionKey?: string; - }, -) { - const { - startDate, - endDate, - timezone = 'UTC', - unit = 'day', - count = '*', - filters = {}, - } = criteria; - const { - parseFilters, - getDateFormat, - rawQuery, - getDateStringQuery, - getDateQuery, - getBetweenDates, - } = clickhouse; - const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - const { filterQuery } = parseFilters(filters, params); - - return rawQuery( - `select - ${getDateStringQuery('g.t', unit)} as x, - g.y as y - from - (select - ${getDateQuery('created_at', unit, timezone)} t, - count(${count !== '*' ? 'distinct session_id' : count}) y - from website_event - where website_id = {websiteId:UUID} - and event_type = ${EVENT_TYPE.pageView} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - ${filterQuery} - group by t) g - order by t`, - params, - ); -} diff --git a/queries/analytics/pageview/getPageviewMetrics.ts b/queries/analytics/pageviews/getPageviewMetrics.ts similarity index 63% rename from queries/analytics/pageview/getPageviewMetrics.ts rename to queries/analytics/pageviews/getPageviewMetrics.ts index 5f575a89..677de980 100644 --- a/queries/analytics/pageview/getPageviewMetrics.ts +++ b/queries/analytics/pageviews/getPageviewMetrics.ts @@ -1,8 +1,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getPageviewMetrics( ...args: [ @@ -31,39 +32,40 @@ async function relationalQuery( }, ) { const { startDate, endDate, filters = {}, column } = criteria; - const { rawQuery, parseFilters, toUuid } = prisma; + const { rawQuery, parseFilters } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [ + const params: any = { websiteId, - resetDate, - startDate, + startDate: maxDate(startDate, website.resetAt), endDate, - column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, - ]; + eventType: column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, + }; let excludeDomain = ''; if (column === 'referrer_domain') { - excludeDomain = 'and website_event.referrer_domain != $6'; - params.push(website.domain); + excludeDomain = + 'and (website_event.referrer_domain != {{domain}} or website_event.referrer_domain is null)'; + + params.domain = website.domain; } - const { filterQuery, joinSession } = parseFilters(filters, params); + const { filterQuery, joinSession } = parseFilters(filters); return rawQuery( - `select ${column} x, count(*) y + ` + select ${column} x, count(*) y from website_event ${joinSession} - where website_event.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 - and event_type = $5 + where website_event.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} ${excludeDomain} ${filterQuery} group by 1 order by 2 desc - limit 100`, + limit 100 + `, params, ); } @@ -78,11 +80,12 @@ async function clickhouseQuery( }, ) { const { startDate, endDate, filters = {}, column } = criteria; - const { rawQuery, getDateFormat, parseFilters, getBetweenDates } = clickhouse; + const { rawQuery, parseFilters } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); const params = { websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, eventType: column === 'event_name' ? EVENT_TYPE.customEvent : EVENT_TYPE.pageView, domain: undefined, }; @@ -97,17 +100,18 @@ async function clickhouseQuery( const { filterQuery } = parseFilters(filters, params); return rawQuery( - `select ${column} x, count(*) y + ` + select ${column} x, count(*) y from website_event where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} and event_type = {eventType:UInt32} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} ${excludeDomain} ${filterQuery} group by x order by y desc - limit 100`, + limit 100 + `, params, ); } diff --git a/queries/analytics/pageviews/getPageviewStats.ts b/queries/analytics/pageviews/getPageviewStats.ts new file mode 100644 index 00000000..31b0ebdd --- /dev/null +++ b/queries/analytics/pageviews/getPageviewStats.ts @@ -0,0 +1,103 @@ +import clickhouse from 'lib/clickhouse'; +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import prisma from 'lib/prisma'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; + +export interface PageviewStatsCriteria { + startDate: Date; + endDate: Date; + timezone?: string; + unit?: string; + count?: string; + filters: object; + sessionKey?: string; +} + +export async function getPageviewStats( + ...args: [websiteId: string, criteria: PageviewStatsCriteria] +) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery(websiteId: string, criteria: PageviewStatsCriteria) { + const { + startDate, + endDate, + timezone = 'utc', + unit = 'day', + count = '*', + filters = {}, + sessionKey = 'session_id', + } = criteria; + const { getDateQuery, parseFilters, rawQuery } = prisma; + const website = await loadWebsite(websiteId); + const { filterQuery, joinSession } = parseFilters(filters); + + return rawQuery( + ` + select + ${getDateQuery('website_event.created_at', unit, timezone)} x, + count(${count !== '*' ? `${count}${sessionKey}` : count}) y + from website_event + ${joinSession} + where website_event.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + and event_type = {{eventType}} + ${filterQuery} + group by 1 + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, + ); +} + +async function clickhouseQuery(websiteId: string, criteria: PageviewStatsCriteria) { + const { + startDate, + endDate, + timezone = 'UTC', + unit = 'day', + count = '*', + filters = {}, + } = criteria; + const { parseFilters, rawQuery, getDateStringQuery, getDateQuery } = clickhouse; + const website = await loadWebsite(websiteId); + const { filterQuery } = parseFilters(filters); + + return rawQuery( + ` + select + ${getDateStringQuery('g.t', unit)} as x, + g.y as y + from ( + select + ${getDateQuery('created_at', unit, timezone)} as t, + count(${count !== '*' ? 'distinct session_id' : count}) as y + from website_event + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} + ${filterQuery} + group by t + ) as g + order by t + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, + ); +} diff --git a/queries/analytics/pageview/getPageviewFunnel.ts b/queries/analytics/reports/getFunnel.ts similarity index 78% rename from queries/analytics/pageview/getPageviewFunnel.ts rename to queries/analytics/reports/getFunnel.ts index bfd921c1..1dde1a13 100644 --- a/queries/analytics/pageview/getPageviewFunnel.ts +++ b/queries/analytics/reports/getFunnel.ts @@ -2,7 +2,7 @@ import clickhouse from 'lib/clickhouse'; import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; import prisma from 'lib/prisma'; -export async function getPageviewFunnel( +export async function getFunnel( ...args: [ websiteId: string, criteria: { @@ -34,18 +34,16 @@ async function relationalQuery( }[] > { const { windowMinutes, startDate, endDate, urls } = criteria; - const { rawQuery, getFunnelQuery, toUuid } = prisma; + const { rawQuery, getFunnelQuery } = prisma; const { levelQuery, sumQuery, urlFilterQuery } = getFunnelQuery(urls, windowMinutes); - const params: any = [websiteId, startDate, endDate, ...urls]; - return rawQuery( `WITH level0 AS ( select distinct session_id, url_path, referrer_path, created_at from website_event where url_path in (${urlFilterQuery}) - and website_id = $1${toUuid()} - and created_at between $2 and $3 + and website_id = {{websiteId::uuid}} + and created_at between {{startDate}} and {{endDate}} ),level1 AS ( select distinct session_id, url_path as level_1_url, created_at as level_1_created_at from level0 @@ -55,7 +53,7 @@ async function relationalQuery( SELECT ${sumQuery} from level${urls.length}; `, - params, + { websiteId, startDate, endDate, ...urls }, ).then((a: { [key: string]: number }) => { return urls.map((b, i) => ({ x: b, y: a[0][`level${i + 1}`] || 0 })); }); @@ -76,14 +74,8 @@ async function clickhouseQuery( }[] > { const { windowMinutes, startDate, endDate, urls } = criteria; - const { rawQuery, getBetweenDates, getFunnelQuery } = clickhouse; - const { columnsQuery, conditionQuery, urlParams } = getFunnelQuery(urls); - - const params = { - websiteId, - window: windowMinutes * 60, - ...urlParams, - }; + const { rawQuery, getFunnelQuery } = clickhouse; + const { columnsQuery, urlParams } = getFunnelQuery(urls); return rawQuery<{ level: number; count: number }[]>( ` @@ -98,13 +90,19 @@ async function clickhouseQuery( ) AS level FROM website_event WHERE website_id = {websiteId:UUID} - and ${getBetweenDates('created_at', startDate, endDate)} + AND created_at BETWEEN {startDate:DateTime} AND {endDate:DateTime} GROUP BY 1 ) GROUP BY level ORDER BY level ASC; `, - params, + { + websiteId, + startDate, + endDate, + window: windowMinutes * 60, + ...urlParams, + }, ).then(results => { return urls.map((a, i) => ({ x: a, diff --git a/queries/analytics/reports/getInsights.ts b/queries/analytics/reports/getInsights.ts new file mode 100644 index 00000000..1d8970ed --- /dev/null +++ b/queries/analytics/reports/getInsights.ts @@ -0,0 +1,42 @@ +import { CLICKHOUSE, PRISMA, runQuery } from 'lib/db'; +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; + +export interface GetInsightsCriteria { + startDate: Date; + endDate: Date; + fields: string[]; + filters: string[]; + groups: string[]; +} + +export async function getInsights(...args: [websiteId: string, criteria: GetInsightsCriteria]) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery( + websiteId: string, + criteria: GetInsightsCriteria, +): Promise< + { + x: string; + y: number; + }[] +> { + return null; +} + +async function clickhouseQuery( + websiteId: string, + criteria: GetInsightsCriteria, +): Promise< + { + x: string; + y: number; + }[] +> { + return null; +} diff --git a/queries/analytics/session/createSession.ts b/queries/analytics/sessions/createSession.ts similarity index 100% rename from queries/analytics/session/createSession.ts rename to queries/analytics/sessions/createSession.ts diff --git a/queries/analytics/session/getSession.ts b/queries/analytics/sessions/getSession.ts similarity index 100% rename from queries/analytics/session/getSession.ts rename to queries/analytics/sessions/getSession.ts diff --git a/queries/analytics/session/getSessionMetrics.ts b/queries/analytics/sessions/getSessionMetrics.ts similarity index 58% rename from queries/analytics/session/getSessionMetrics.ts rename to queries/analytics/sessions/getSessionMetrics.ts index ef8c79c5..e037176b 100644 --- a/queries/analytics/session/getSessionMetrics.ts +++ b/queries/analytics/sessions/getSessionMetrics.ts @@ -1,8 +1,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { DEFAULT_RESET_DATE, EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getSessionMetrics( ...args: [ @@ -21,11 +22,9 @@ async function relationalQuery( criteria: { startDate: Date; endDate: Date; column: string; filters: object }, ) { const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); const { startDate, endDate, column, filters = {} } = criteria; - const { toUuid, parseFilters, rawQuery } = prisma; - const params: any = [websiteId, resetDate, startDate, endDate]; - const { filterQuery, joinSession } = parseFilters(filters, params); + const { parseFilters, rawQuery } = prisma; + const { filterQuery, joinSession } = parseFilters(filters); return rawQuery( `select ${column} x, count(*) y @@ -36,15 +35,14 @@ async function relationalQuery( join website on website_event.website_id = website.website_id ${joinSession} - where website.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 + where website.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} ${filterQuery} ) group by 1 order by 2 desc limit 100`, - params, + { ...filters, websiteId, startDate: maxDate(startDate, website.resetAt), endDate }, ); } @@ -53,23 +51,29 @@ async function clickhouseQuery( data: { startDate: Date; endDate: Date; column: string; filters: object }, ) { const { startDate, endDate, column, filters = {} } = data; - const { getDateFormat, parseFilters, getBetweenDates, rawQuery } = clickhouse; + const { parseFilters, rawQuery } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - const { filterQuery } = parseFilters(filters, params); + const { filterQuery } = parseFilters(filters); return rawQuery( - `select ${column} x, count(distinct session_id) y + ` + select + ${column} x, count(distinct session_id) y from website_event as x where website_id = {websiteId:UUID} - and event_type = ${EVENT_TYPE.pageView} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} ${filterQuery} group by x order by y desc - limit 100`, - params, + limit 100 + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, ); } diff --git a/queries/analytics/session/getSessions.ts b/queries/analytics/sessions/getSessions.ts similarity index 77% rename from queries/analytics/session/getSessions.ts rename to queries/analytics/sessions/getSessions.ts index a4fbb501..6936f902 100644 --- a/queries/analytics/session/getSessions.ts +++ b/queries/analytics/sessions/getSessions.ts @@ -9,22 +9,23 @@ export async function getSessions(...args: [websiteId: string, startAt: Date]) { }); } -async function relationalQuery(websiteId: string, startAt: Date) { +async function relationalQuery(websiteId: string, startDate: Date) { return prisma.client.session.findMany({ where: { websiteId, createdAt: { - gte: startAt, + gte: startDate, }, }, }); } -async function clickhouseQuery(websiteId: string, startAt: Date) { +async function clickhouseQuery(websiteId: string, startDate: Date) { const { rawQuery } = clickhouse; return rawQuery( - `select distinct + ` + select distinct session_id as id, website_id as websiteId, created_at as createdAt, @@ -41,10 +42,11 @@ async function clickhouseQuery(websiteId: string, startAt: Date) { city from website_event where website_id = {websiteId:UUID} - and created_at >= {startAt:DateTime('UTC')}`, + and created_at >= {startDate:DateTime} + `, { websiteId, - startAt, + startDate, }, ); } diff --git a/queries/analytics/session/saveSessionData.ts b/queries/analytics/sessions/saveSessionData.ts similarity index 96% rename from queries/analytics/session/saveSessionData.ts rename to queries/analytics/sessions/saveSessionData.ts index 192053f1..246813e7 100644 --- a/queries/analytics/session/saveSessionData.ts +++ b/queries/analytics/sessions/saveSessionData.ts @@ -1,5 +1,5 @@ import { DATA_TYPE } from 'lib/constants'; -import { uuid } from 'lib/crypto'; +import { uuid } from 'next-basics'; import { flattenJSON } from 'lib/dynamicData'; import prisma from 'lib/prisma'; import { DynamicData } from 'lib/types'; diff --git a/queries/analytics/stats/getActiveVisitors.ts b/queries/analytics/stats/getActiveVisitors.ts index 89f092c1..8dcfd7c9 100644 --- a/queries/analytics/stats/getActiveVisitors.ts +++ b/queries/analytics/stats/getActiveVisitors.ts @@ -11,31 +11,32 @@ export async function getActiveVisitors(...args: [websiteId: string]) { } async function relationalQuery(websiteId: string) { - const { toUuid, rawQuery } = prisma; - - const date = subMinutes(new Date(), 5); - const params: any = [websiteId, date]; + const { rawQuery } = prisma; return rawQuery( - `select count(distinct session_id) x + ` + select count(distinct session_id) x from website_event - join website + join website on website_event.website_id = website.website_id - where website.website_id = $1${toUuid()} - and website_event.created_at >= $2`, - params, + where website.website_id = {{websiteId::uuid}} + and website_event.created_at >= {{startAt}} + `, + { websiteId, startAt: subMinutes(new Date(), 5) }, ); } async function clickhouseQuery(websiteId: string) { const { rawQuery } = clickhouse; - const params = { websiteId, startAt: subMinutes(new Date(), 5) }; return rawQuery( - `select count(distinct session_id) x + ` + select + count(distinct session_id) x from website_event where website_id = {websiteId:UUID} - and created_at >= {startAt:DateTime('UTC')}`, - params, + and created_at >= {startAt:DateTime} + `, + { websiteId, startAt: subMinutes(new Date(), 5) }, ); } diff --git a/queries/analytics/stats/getRealtimeData.ts b/queries/analytics/stats/getRealtimeData.ts index 8c215215..2b8f1212 100644 --- a/queries/analytics/stats/getRealtimeData.ts +++ b/queries/analytics/stats/getRealtimeData.ts @@ -1,6 +1,5 @@ -import { md5 } from 'lib/crypto'; -import { getSessions } from '../session/getSessions'; -import { getEvents } from '../event/getEvents'; +import { md5 } from 'next-basics'; +import { getSessions, getEvents } from 'queries'; import { EVENT_TYPE } from 'lib/constants'; export async function getRealtimeData(websiteId, time) { @@ -20,7 +19,7 @@ export async function getRealtimeData(websiteId, time) { }; return { - pageviews: decorate('pageview', pageviews), + pageviews: decorate('pageviews', pageviews), sessions: decorate('session', sessions), events: decorate('event', events), timestamp: Date.now(), diff --git a/queries/analytics/stats/getWebsiteDateRange.ts b/queries/analytics/stats/getWebsiteDateRange.ts new file mode 100644 index 00000000..45885e45 --- /dev/null +++ b/queries/analytics/stats/getWebsiteDateRange.ts @@ -0,0 +1,51 @@ +import prisma from 'lib/prisma'; +import clickhouse from 'lib/clickhouse'; +import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; +import { loadWebsite } from 'lib/load'; +import { DEFAULT_RESET_DATE } from 'lib/constants'; +import { maxDate } from 'lib/date'; + +export async function getWebsiteDateRange(...args: [websiteId: string]) { + return runQuery({ + [PRISMA]: () => relationalQuery(...args), + [CLICKHOUSE]: () => clickhouseQuery(...args), + }); +} + +async function relationalQuery(websiteId: string) { + const { rawQuery } = prisma; + const website = await loadWebsite(websiteId); + + const result = await rawQuery( + ` + select + min(created_at) as mindate, + max(created_at) as maxdate + from website_event + where website_id = {{websiteId::uuid}} + and created_at >= {{startDate}} + `, + { websiteId, startDate: maxDate(new Date(DEFAULT_RESET_DATE), new Date(website.resetAt)) }, + ); + + return result[0] ?? null; +} + +async function clickhouseQuery(websiteId: string) { + const { rawQuery } = clickhouse; + const website = await loadWebsite(websiteId); + + const result = await rawQuery( + ` + select + min(created_at) as mindate, + max(created_at) as maxdate + from website_event + where website_id = {websiteId:UUID} + and created_at >= {startDate:DateTime} + `, + { websiteId, startDate: maxDate(new Date(DEFAULT_RESET_DATE), new Date(website.resetAt)) }, + ); + + return result[0] ?? null; +} diff --git a/queries/analytics/stats/getWebsiteStats.ts b/queries/analytics/stats/getWebsiteStats.ts index 5d5a1f9a..f44abafa 100644 --- a/queries/analytics/stats/getWebsiteStats.ts +++ b/queries/analytics/stats/getWebsiteStats.ts @@ -1,8 +1,9 @@ import prisma from 'lib/prisma'; import clickhouse from 'lib/clickhouse'; import { runQuery, CLICKHOUSE, PRISMA } from 'lib/db'; -import { DEFAULT_CREATED_AT, EVENT_TYPE } from 'lib/constants'; -import { loadWebsite } from 'lib/query'; +import { EVENT_TYPE } from 'lib/constants'; +import { loadWebsite } from 'lib/load'; +import { maxDate } from 'lib/date'; export async function getWebsiteStats( ...args: [ @@ -21,34 +22,41 @@ async function relationalQuery( criteria: { startDate: Date; endDate: Date; filters: object }, ) { const { startDate, endDate, filters = {} } = criteria; - const { toUuid, getDateQuery, getTimestampInterval, parseFilters, rawQuery } = prisma; + const { getDateQuery, getTimestampIntervalQuery, parseFilters, rawQuery } = prisma; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params: any = [websiteId, resetDate, startDate, endDate]; - const { filterQuery, joinSession } = parseFilters(filters, params); + const { filterQuery, joinSession } = parseFilters(filters); return rawQuery( - `select sum(t.c) as "pageviews", - count(distinct t.session_id) as "uniques", - sum(case when t.c = 1 then 1 else 0 end) as "bounces", - sum(t.time) as "totaltime" - from ( - select website_event.session_id, - ${getDateQuery('website_event.created_at', 'hour')}, - count(*) c, - ${getTimestampInterval('website_event.created_at')} as "time" - from website_event - join website - on website_event.website_id = website.website_id - ${joinSession} - where event_type = ${EVENT_TYPE.pageView} - and website.website_id = $1${toUuid()} - and website_event.created_at >= $2 - and website_event.created_at between $3 and $4 - ${filterQuery} - group by 1, 2 - ) t`, - params, + ` + select + sum(t.c) as "pageviews", + count(distinct t.session_id) as "uniques", + sum(case when t.c = 1 then 1 else 0 end) as "bounces", + sum(t.time) as "totaltime" + from ( + select + website_event.session_id, + ${getDateQuery('website_event.created_at', 'hour')}, + count(*) as c, + ${getTimestampIntervalQuery('website_event.created_at')} as "time" + from website_event + join website + on website_event.website_id = website.website_id + ${joinSession} + where event_type = {{eventType}} + and website.website_id = {{websiteId::uuid}} + and website_event.created_at between {{startDate}} and {{endDate}} + ${filterQuery} + group by 1, 2 + ) as t + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, ); } @@ -57,32 +65,38 @@ async function clickhouseQuery( criteria: { startDate: Date; endDate: Date; filters: object }, ) { const { startDate, endDate, filters = {} } = criteria; - const { rawQuery, getDateFormat, getDateQuery, getBetweenDates, parseFilters } = clickhouse; + const { rawQuery, getDateQuery, parseFilters } = clickhouse; const website = await loadWebsite(websiteId); - const resetDate = new Date(website?.resetAt || DEFAULT_CREATED_AT); - const params = { websiteId }; - const { filterQuery } = parseFilters(filters, params); + const { filterQuery } = parseFilters(filters); return rawQuery( - `select - sum(t.c) as "pageviews", - count(distinct t.session_id) as "uniques", - sum(if(t.c = 1, 1, 0)) as "bounces", - sum(if(max_time < min_time + interval 1 hour, max_time-min_time, 0)) as "totaltime" - from ( - select session_id, - ${getDateQuery('created_at', 'day')} time_series, - count(*) c, - min(created_at) min_time, - max(created_at) max_time - from website_event - where event_type = ${EVENT_TYPE.pageView} - and website_id = {websiteId:UUID} - and created_at >= ${getDateFormat(resetDate)} - and ${getBetweenDates('created_at', startDate, endDate)} - ${filterQuery} - group by session_id, time_series - ) t;`, - params, + ` + select + sum(t.c) as "pageviews", + count(distinct t.session_id) as "uniques", + sum(if(t.c = 1, 1, 0)) as "bounces", + sum(if(max_time < min_time + interval 1 hour, max_time-min_time, 0)) as "totaltime" + from ( + select + session_id, + ${getDateQuery('created_at', 'day')} time_series, + count(*) c, + min(created_at) min_time, + max(created_at) max_time + from website_event + where website_id = {websiteId:UUID} + and created_at between {startDate:DateTime} and {endDate:DateTime} + and event_type = {eventType:UInt32} + ${filterQuery} + group by session_id, time_series + ) as t; + `, + { + ...filters, + websiteId, + startDate: maxDate(startDate, website.resetAt), + endDate, + eventType: EVENT_TYPE.pageView, + }, ); } diff --git a/queries/index.js b/queries/index.js index b0e4e00b..f86551c4 100644 --- a/queries/index.js +++ b/queries/index.js @@ -3,19 +3,23 @@ export * from './admin/teamUser'; export * from './admin/user'; export * from './admin/report'; export * from './admin/website'; -export * from './analytics/event/getEventMetrics'; -export * from './analytics/event/getEventUsage'; -export * from './analytics/event/getEvents'; +export * from './analytics/events/getEventMetrics'; +export * from './analytics/events/getEventUsage'; +export * from './analytics/events/getEvents'; +export * from './analytics/eventData/getEventDataEvents'; export * from './analytics/eventData/getEventDataFields'; export * from './analytics/eventData/getEventDataUsage'; -export * from './analytics/event/saveEvent'; -export * from './analytics/pageview/getPageviewFunnel'; -export * from './analytics/pageview/getPageviewMetrics'; -export * from './analytics/pageview/getPageviewStats'; -export * from './analytics/session/createSession'; -export * from './analytics/session/getSession'; -export * from './analytics/session/getSessionMetrics'; -export * from './analytics/session/getSessions'; +export * from './analytics/events/saveEvent'; +export * from './analytics/reports/getFunnel'; +export * from './analytics/reports/getInsights'; +export * from './analytics/pageviews/getPageviewMetrics'; +export * from './analytics/pageviews/getPageviewStats'; +export * from './analytics/sessions/createSession'; +export * from './analytics/sessions/getSession'; +export * from './analytics/sessions/getSessionMetrics'; +export * from './analytics/sessions/getSessions'; +export * from './analytics/sessions/saveSessionData'; export * from './analytics/stats/getActiveVisitors'; export * from './analytics/stats/getRealtimeData'; +export * from './analytics/stats/getWebsiteDateRange'; export * from './analytics/stats/getWebsiteStats'; diff --git a/scripts/telemetry.js b/scripts/telemetry.js index 67fe3202..24cd40c9 100644 --- a/scripts/telemetry.js +++ b/scripts/telemetry.js @@ -1,42 +1,24 @@ -const fs = require('fs-extra'); -const path = require('path'); const os = require('os'); const isCI = require('is-ci'); const pkg = require('../package.json'); -const dest = path.resolve(__dirname, '../.next/cache/umami.json'); -const url = 'https://telemetry.umami.is/api/send'; - -async function sendTelemetry(action) { - let json = {}; - - try { - json = await fs.readJSON(dest); - } catch { - // Ignore - } - - try { - await fs.writeJSON(dest, { version: pkg.version }); - } catch { - // Ignore - } +const url = 'https://api.umami.is/v1/telemetry'; +async function sendTelemetry(type) { const { default: isDocker } = await import('is-docker'); const { default: fetch } = await import('node-fetch'); - const upgrade = json.version !== undefined && json.version !== pkg.version; - const payload = { - action, - version: pkg.version, - node: process.version, - platform: os.platform(), - arch: os.arch(), - os: `${os.type()} (${os.version()})`, - docker: isDocker(), - ci: isCI, - prev: json.version, - upgrade, + const data = { + type, + payload: { + version: pkg.version, + node: process.version, + platform: os.platform(), + arch: os.arch(), + os: `${os.type()} (${os.version()})`, + isDocker: isDocker(), + isCi: isCI, + }, }; try { @@ -46,7 +28,7 @@ async function sendTelemetry(action) { headers: { 'Content-Type': 'application/json', }, - body: JSON.stringify(payload), + body: JSON.stringify(data), }); } catch { // Ignore diff --git a/store/websites.js b/store/websites.ts similarity index 52% rename from store/websites.js rename to store/websites.ts index 34f8242d..0d210af6 100644 --- a/store/websites.js +++ b/store/websites.ts @@ -1,28 +1,20 @@ import { create } from 'zustand'; import produce from 'immer'; -import app from './app'; -import { parseDateRange } from 'lib/date'; +import { DateRange } from 'lib/types'; const store = create(() => ({})); -export function getWebsiteDateRange(websiteId) { +export function getWebsiteDateRange(websiteId: string) { return store.getState()?.[websiteId]; } -export function setWebsiteDateRange(websiteId, value) { +export function setWebsiteDateRange(websiteId: string, dateRange: DateRange) { store.setState( produce(state => { if (!state[websiteId]) { state[websiteId] = {}; } - let dateRange = value; - - if (typeof value === 'string') { - const { locale } = app.getState(); - dateRange = parseDateRange(value, locale); - } - state[websiteId].dateRange = { ...dateRange, modified: Date.now() }; return state; diff --git a/yarn.lock b/yarn.lock index db55eeca..ec66b4ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6260,14 +6260,15 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next-basics@^0.31.0: - version "0.31.0" - resolved "https://registry.npmjs.org/next-basics/-/next-basics-0.31.0.tgz" - integrity sha512-uAum7v4DQ37IdqKdmLTFLMyN+ir7FNMeMHQcTd1RQ14sm/fO/tntadlsXulwj/A5xs3gmnW/gfGkLX7VnNjreg== +next-basics@^0.33.0: + version "0.33.0" + resolved "https://registry.yarnpkg.com/next-basics/-/next-basics-0.33.0.tgz#da4736dbaa6b8461ae1fe40de4cde20cbe7744e6" + integrity sha512-pKynp6/zMboQk/mlzyOZgfFsYShKpieu3XoQM5EmTL311mP2KkcW59hiVHloLR7W6zaaf/ONWzi0L1iw05Qfag== dependencies: bcryptjs "^2.4.3" jsonwebtoken "^9.0.0" pure-rand "^6.0.2" + uuid "^9.0.0" next@13.3.1: version "13.3.1" @@ -8967,6 +8968,11 @@ uuid@^8.3.2: resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz"