Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • web-et-numerique/factory/llle_project/ecolyo
1 result
Show changes
Commits on Source (5)
Showing
with 546 additions and 135 deletions
......@@ -9,6 +9,7 @@ module.exports = {
overrides: [
{
extends: [
'plugin:jsdoc/recommended',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/eslint-recommended', // Uses the recommended rules from @typescript-eslint/eslint-plugin
// This enables a lot of type checking
......@@ -27,6 +28,18 @@ module.exports = {
'@typescript-eslint/prefer-as-const': 'error',
'@typescript-eslint/await-thenable': 'error',
'@typescript-eslint/no-var-requires': 'off',
// JSDOC extends overrides: disable some of extends rules
// JSdoc is not always needed
'jsdoc/require-jsdoc': 0,
// Prefer declaring types with typescript
'jsdoc/require-returns': 0,
'jsdoc/require-returns-type': 0,
'jsdoc/require-param': 0,
'jsdoc/require-param-type': 0,
// Allow some params to be described and some to be omitted
'jsdoc/check-param-names': 0,
},
},
{
......
import { Fade } from '@material-ui/core'
import Loader from 'components/Loader/Loader'
import { useClient } from 'cozy-client'
import { FluidType, TimeStep } from 'enums'
import { FluidState, FluidType, TimeStep } from 'enums'
import { PerformanceIndicator, TimePeriod } from 'models'
import React, { useEffect, useMemo, useState } from 'react'
import ConsumptionService from 'services/consumption.service'
......@@ -11,6 +11,7 @@ import Comparison from './Comparison/Comparison'
import ElecHalfHourMonthlyAnalysis from './ElecHalfHourMonthlyAnalysis/ElecHalfHourMonthlyAnalysis'
import IncompleteDataWarning from './IncompleteDataWarning/IncompleteDataWarning'
import MaxConsumptionCard from './MaxConsumptionCard/MaxConsumptionCard'
import NoAnalysisModal from './NoKonnector/NoAnalysisModal'
import ProfileComparator from './ProfileComparator/ProfileComparator'
import TotalAnalysisChart from './TotalAnalysisChart/TotalAnalysisChart'
import './monthlyanalysis.scss'
......@@ -25,7 +26,10 @@ const MonthlyAnalysis = ({
scrollPosition,
}: MonthlyAnalysisProps) => {
const client = useClient()
const { analysisMonth } = useAppSelector(state => state.ecolyo.analysis)
const {
analysis: { analysisMonth },
global: { fluidStatus },
} = useAppSelector(state => state.ecolyo)
const consumptionService = useMemo(
() => new ConsumptionService(client),
......@@ -36,7 +40,12 @@ const MonthlyAnalysis = ({
[]
)
const allKonnectorDisconnected = fluidStatus.some(
fluid => fluid.status === FluidState.NOT_CONNECTED
)
const [loadAnalysis, setLoadAnalysis] = useState<boolean>(true)
const [openNoDataModal, setOpenNoDataModal] = useState(false)
const [fluidsWithData, setFluidsWithData] = useState<FluidType[]>([])
const [incompleteDataFluids, setIncompleteDataFluids] = useState<FluidType[]>(
[]
......@@ -95,6 +104,9 @@ const MonthlyAnalysis = ({
)
)
}
if (resultFluids.length === 0 && allKonnectorDisconnected) {
setOpenNoDataModal(true)
}
setFluidsWithData(resultFluids)
setLoadAnalysis(false)
}
......@@ -108,6 +120,7 @@ const MonthlyAnalysis = ({
subscribed = false
}
}, [
allKonnectorDisconnected,
analysisMonth,
consumptionService,
performanceIndicatorService,
......@@ -129,6 +142,7 @@ const MonthlyAnalysis = ({
<Loader />
</div>
)}
<NoAnalysisModal open={openNoDataModal} onClose={setOpenNoDataModal} />
{!loadAnalysis && (
<Fade in={!loadAnalysis}>
<div className="analysis-root">
......
import Button from '@material-ui/core/Button'
import Dialog from '@material-ui/core/Dialog'
import { mount } from 'enzyme'
import React from 'react'
import NoAnalysisModal from './NoAnalysisModal'
describe('NoAnalysisModal component', () => {
it('should be rendered correctly', () => {
const wrapper = mount(<NoAnalysisModal open={true} onClose={jest.fn()} />)
expect(wrapper.find(Dialog).exists()).toBeTruthy()
expect(wrapper.find(Button).exists()).toBeTruthy()
})
})
import Button from '@material-ui/core/Button'
import Dialog from '@material-ui/core/Dialog'
import { useI18n } from 'cozy-ui/transpiled/react/I18n'
import React from 'react'
import { useNavigate } from 'react-router-dom'
import './noAnalysisModal.scss'
const NoAnalysisModal = ({
open,
onClose,
}: {
open: boolean
onClose: React.Dispatch<React.SetStateAction<boolean>>
}) => {
const { t } = useI18n()
const navigate = useNavigate()
const goToConsumption = () => {
navigate('/consumption')
}
const close = () => {
onClose(false)
}
return (
<Dialog
open={open}
onClose={close}
aria-labelledby="accessibility-title"
classes={{
root: 'modal-root',
paper: 'modal-paper',
}}
>
<div id="accessibility-title">
{t('analysis_error_modal.accessibility.window_title')}
</div>
<div className="em-root analysis-error-container">
<div className="analysis-error-title text-20-bold">
{t('analysis_error_modal.title')}
</div>
<div className="analysis-error-message text-16-normal">
{t('analysis_error_modal.message')}
</div>
<div className="analysis-error-button">
<Button
aria-label={t(
'analysis_error_modal.accessibility.button_understood'
)}
onClick={close}
classes={{
root: 'btn-secondary-positive',
label: 'text-16-normal',
}}
>
{t('analysis_error_modal.understood')}
</Button>
<Button
aria-label={t(
'analysis_error_modal.accessibility.button_goto_konnector'
)}
onClick={goToConsumption}
classes={{
root: 'btn-highlight',
label: 'text-16-bold',
}}
>
{t('analysis_error_modal.go_to_conso')}
</Button>
</div>
</div>
</Dialog>
)
}
export default NoAnalysisModal
@import 'src/styles/base/color';
@import 'src/styles/base/breakpoint';
.analysis-error-container {
color: $grey-bright;
text-align: center;
display: flex;
flex-direction: column;
gap: 1.5rem;
.analysis-error-title {
color: $gold-shadow;
}
.analysis-error-button {
display: flex;
justify-content: space-between;
gap: 1rem;
button {
margin: 0;
height: 45px;
&.btn-secondary-positive {
margin-bottom: 0;
}
}
@media #{$large-phone} {
flex-direction: column-reverse;
button {
width: 100%;
}
}
}
}
......@@ -48,6 +48,378 @@ exports[`MonthlyAnalysis component should be rendered correctly 1`] = `
saveLastScrollPosition={[MockFunction]}
scrollPosition={0}
>
<NoAnalysisModal
onClose={[Function]}
open={false}
>
<WithStyles(ForwardRef(Dialog))
aria-labelledby="accessibility-title"
classes={
Object {
"paper": "modal-paper",
"root": "modal-root",
}
}
onClose={[Function]}
open={false}
>
<ForwardRef(Dialog)
aria-labelledby="accessibility-title"
classes={
Object {
"container": "MuiDialog-container",
"paper": "MuiDialog-paper modal-paper",
"paperFullScreen": "MuiDialog-paperFullScreen",
"paperFullWidth": "MuiDialog-paperFullWidth",
"paperScrollBody": "MuiDialog-paperScrollBody",
"paperScrollPaper": "MuiDialog-paperScrollPaper",
"paperWidthFalse": "MuiDialog-paperWidthFalse",
"paperWidthLg": "MuiDialog-paperWidthLg",
"paperWidthMd": "MuiDialog-paperWidthMd",
"paperWidthSm": "MuiDialog-paperWidthSm",
"paperWidthXl": "MuiDialog-paperWidthXl",
"paperWidthXs": "MuiDialog-paperWidthXs",
"root": "MuiDialog-root modal-root",
"scrollBody": "MuiDialog-scrollBody",
"scrollPaper": "MuiDialog-scrollPaper",
}
}
onClose={[Function]}
open={false}
>
<ForwardRef(Modal)
BackdropComponent={
Object {
"$$typeof": Symbol(react.forward_ref),
"Naked": Object {
"$$typeof": Symbol(react.forward_ref),
"propTypes": Object {
"children": [Function],
"className": [Function],
"classes": [Function],
"invisible": [Function],
"open": [Function],
"transitionDuration": [Function],
},
"render": [Function],
},
"displayName": "WithStyles(ForwardRef(Backdrop))",
"options": Object {
"defaultTheme": Object {
"breakpoints": Object {
"between": [Function],
"down": [Function],
"keys": Array [
"xs",
"sm",
"md",
"lg",
"xl",
],
"only": [Function],
"up": [Function],
"values": Object {
"lg": 1280,
"md": 960,
"sm": 600,
"xl": 1920,
"xs": 0,
},
"width": [Function],
},
"direction": "ltr",
"mixins": Object {
"gutters": [Function],
"toolbar": Object {
"@media (min-width:0px) and (orientation: landscape)": Object {
"minHeight": 48,
},
"@media (min-width:600px)": Object {
"minHeight": 64,
},
"minHeight": 56,
},
},
"overrides": Object {},
"palette": Object {
"action": Object {
"activatedOpacity": 0.12,
"active": "rgba(0, 0, 0, 0.54)",
"disabled": "rgba(0, 0, 0, 0.26)",
"disabledBackground": "rgba(0, 0, 0, 0.12)",
"disabledOpacity": 0.38,
"focus": "rgba(0, 0, 0, 0.12)",
"focusOpacity": 0.12,
"hover": "rgba(0, 0, 0, 0.04)",
"hoverOpacity": 0.04,
"selected": "rgba(0, 0, 0, 0.08)",
"selectedOpacity": 0.08,
},
"augmentColor": [Function],
"background": Object {
"default": "#fafafa",
"paper": "#fff",
},
"common": Object {
"black": "#000",
"white": "#fff",
},
"contrastThreshold": 3,
"divider": "rgba(0, 0, 0, 0.12)",
"error": Object {
"contrastText": "#fff",
"dark": "#d32f2f",
"light": "#e57373",
"main": "#f44336",
},
"getContrastText": [Function],
"grey": Object {
"100": "#f5f5f5",
"200": "#eeeeee",
"300": "#e0e0e0",
"400": "#bdbdbd",
"50": "#fafafa",
"500": "#9e9e9e",
"600": "#757575",
"700": "#616161",
"800": "#424242",
"900": "#212121",
"A100": "#d5d5d5",
"A200": "#aaaaaa",
"A400": "#303030",
"A700": "#616161",
},
"info": Object {
"contrastText": "#fff",
"dark": "#1976d2",
"light": "#64b5f6",
"main": "#2196f3",
},
"primary": Object {
"contrastText": "#fff",
"dark": "#303f9f",
"light": "#7986cb",
"main": "#3f51b5",
},
"secondary": Object {
"contrastText": "#fff",
"dark": "#c51162",
"light": "#ff4081",
"main": "#f50057",
},
"success": Object {
"contrastText": "rgba(0, 0, 0, 0.87)",
"dark": "#388e3c",
"light": "#81c784",
"main": "#4caf50",
},
"text": Object {
"disabled": "rgba(0, 0, 0, 0.38)",
"hint": "rgba(0, 0, 0, 0.38)",
"primary": "rgba(0, 0, 0, 0.87)",
"secondary": "rgba(0, 0, 0, 0.54)",
},
"tonalOffset": 0.2,
"type": "light",
"warning": Object {
"contrastText": "rgba(0, 0, 0, 0.87)",
"dark": "#f57c00",
"light": "#ffb74d",
"main": "#ff9800",
},
},
"props": Object {},
"shadows": Array [
"none",
"0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)",
"0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)",
"0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)",
"0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)",
"0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)",
"0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)",
"0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)",
"0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)",
"0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)",
"0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)",
"0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)",
"0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)",
"0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)",
"0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)",
"0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)",
"0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)",
"0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)",
"0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)",
"0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)",
"0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)",
"0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)",
"0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)",
"0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)",
"0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)",
],
"shape": Object {
"borderRadius": 4,
},
"spacing": [Function],
"transitions": Object {
"create": [Function],
"duration": Object {
"complex": 375,
"enteringScreen": 225,
"leavingScreen": 195,
"short": 250,
"shorter": 200,
"shortest": 150,
"standard": 300,
},
"easing": Object {
"easeIn": "cubic-bezier(0.4, 0, 1, 1)",
"easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)",
"easeOut": "cubic-bezier(0.0, 0, 0.2, 1)",
"sharp": "cubic-bezier(0.4, 0, 0.6, 1)",
},
"getAutoHeightDuration": [Function],
},
"typography": Object {
"body1": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "1rem",
"fontWeight": 400,
"letterSpacing": "0.00938em",
"lineHeight": 1.5,
},
"body2": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "0.875rem",
"fontWeight": 400,
"letterSpacing": "0.01071em",
"lineHeight": 1.43,
},
"button": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "0.875rem",
"fontWeight": 500,
"letterSpacing": "0.02857em",
"lineHeight": 1.75,
"textTransform": "uppercase",
},
"caption": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "0.75rem",
"fontWeight": 400,
"letterSpacing": "0.03333em",
"lineHeight": 1.66,
},
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": 14,
"fontWeightBold": 700,
"fontWeightLight": 300,
"fontWeightMedium": 500,
"fontWeightRegular": 400,
"h1": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "6rem",
"fontWeight": 300,
"letterSpacing": "-0.01562em",
"lineHeight": 1.167,
},
"h2": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "3.75rem",
"fontWeight": 300,
"letterSpacing": "-0.00833em",
"lineHeight": 1.2,
},
"h3": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "3rem",
"fontWeight": 400,
"letterSpacing": "0em",
"lineHeight": 1.167,
},
"h4": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "2.125rem",
"fontWeight": 400,
"letterSpacing": "0.00735em",
"lineHeight": 1.235,
},
"h5": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "1.5rem",
"fontWeight": 400,
"letterSpacing": "0em",
"lineHeight": 1.334,
},
"h6": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "1.25rem",
"fontWeight": 500,
"letterSpacing": "0.0075em",
"lineHeight": 1.6,
},
"htmlFontSize": 16,
"overline": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "0.75rem",
"fontWeight": 400,
"letterSpacing": "0.08333em",
"lineHeight": 2.66,
"textTransform": "uppercase",
},
"pxToRem": [Function],
"round": [Function],
"subtitle1": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "1rem",
"fontWeight": 400,
"letterSpacing": "0.00938em",
"lineHeight": 1.75,
},
"subtitle2": Object {
"fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
"fontSize": "0.875rem",
"fontWeight": 500,
"letterSpacing": "0.00714em",
"lineHeight": 1.57,
},
},
"zIndex": Object {
"appBar": 1100,
"drawer": 1200,
"mobileStepper": 1000,
"modal": 1300,
"snackbar": 1400,
"speedDial": 1050,
"tooltip": 1500,
},
},
"name": "MuiBackdrop",
},
"propTypes": Object {
"classes": [Function],
"innerRef": [Function],
},
"render": [Function],
"useStyles": [Function],
}
}
BackdropProps={
Object {
"transitionDuration": Object {
"enter": 225,
"exit": 195,
},
}
}
className="MuiDialog-root modal-root"
closeAfterTransition={true}
disableEscapeKeyDown={false}
onClose={[Function]}
open={false}
/>
</ForwardRef(Dialog)>
</WithStyles(ForwardRef(Dialog))>
</NoAnalysisModal>
<ForwardRef(Fade)
in={true}
>
......
......@@ -197,10 +197,10 @@ const ConnectionResult = ({
/**
* Get Konnector state, possible values:
* * partner maintenance
* * error state
* * outdated
* * last update date
* - partner maintenance
* - error state
* - outdated
* - last update date
*/
const getConnectionStatus = () => {
// First check if there is partner error from backoffice
......
......@@ -12,9 +12,11 @@
color: $gold-shadow;
}
.buttons {
margin-top: 2rem;
display: flex;
gap: 1rem;
button {
margin: 0;
height: 40px;
}
}
......
......@@ -106,6 +106,17 @@
"year_tab": "Comparer à l'année dernière"
}
},
"analysis_error_modal": {
"title": "Aucune analyse",
"message": "Pour profiter d’une analyse de vos consommations, connectez au moins un de vos compteurs.",
"go_to_conso": "Je connecte mes compteurs",
"understood": "J'ai compris",
"accessibility": {
"window_title": "Fenêtre d'erreur",
"button_understood": "J'ai compris",
"button_goto_konnector": "Aller aux connecteurs"
}
},
"analysis_pie": {
"total": "Conso totale",
"month": "Au mois\u00a0",
......
......@@ -33,7 +33,6 @@ async function currentSchemaVersion(_client: Client): Promise<number> {
/**
* Retrieve all documents of a given doctype
* @param _client cozyClient
* @param doctype
* @returns all documents of given doctype
*/
async function getDocs(
......@@ -58,8 +57,6 @@ async function getDocs(
/**
* Update schema version
* @param _client
* @param targetSchemaVersion
*/
async function updateSchemaVersion(
_client: Client,
......@@ -75,8 +72,6 @@ async function updateSchemaVersion(
/**
* Save updated docs
* @param _client
* @param docs
* @returns Promise<MigrationResult>
*/
async function save(_client: Client, docs: any[]): Promise<MigrationResult> {
......@@ -126,9 +121,6 @@ export const initSchemaDoctype = async (
/**
* Run migration
* @param migration
* @param _client
* @returnsPromise<MigrationResult>
*/
export async function migrate(
migration: Migration,
......
......@@ -25,7 +25,6 @@ export default class ActionService {
/**
* Get the list of available actions
* @returns {Promise<Ecogesture[]>}
*/
public async getAvailableActionList(): Promise<Ecogesture[]> {
const userChallenges: UserChallenge[] =
......@@ -55,8 +54,7 @@ export default class ActionService {
}
/**
* Get default eocgestures
* @returns {Promise<Ecogesture[]>}
* Get default ecogestures
*/
public async getDefaultActions(): Promise<Ecogesture[]> {
const actionIds = ['ECOGESTURE0030', 'ECOGESTURE0014', 'ECOGESTURE0010']
......@@ -66,9 +64,7 @@ export default class ActionService {
return defaultActions
}
/** Complete the list with unfinished default ecogestures
* @returns {Promise<Ecogesture[]>}
*/
/** Complete the list with unfinished default ecogestures */
public async keepListComplete(
actionList: Ecogesture[]
): Promise<Ecogesture[]> {
......@@ -81,12 +77,6 @@ export default class ActionService {
return actionList
}
/**
*
* @param {Ecogesture[]} filteredList
* @param {Ecogesture[]} actionList
* @returns {Ecogesture[]}
*/
private completeWithNoSeason(
filteredList: Ecogesture[],
actionList: Ecogesture[]
......@@ -107,8 +97,6 @@ export default class ActionService {
}
/**
* filterBySeason - Filter action list depending on current season
* @param {Ecogesture[]} actionList
* @returns {Ecogesture[]}
*/
public filterBySeason(actionList: Ecogesture[]): Ecogesture[] {
let filteredList: Ecogesture[] = []
......@@ -134,8 +122,6 @@ export default class ActionService {
/**
* getCustomActions - Filter action by fluid and season and sort them by difficulty first and efficiency second
* @param {FluidType[]} connectedFluids
* @returns {Promise<Ecogesture[]>}
*/
public async getCustomActions(
connectedFluids: FluidType[]
......@@ -169,8 +155,6 @@ export default class ActionService {
/**
* launchAction - parse ecogesture to UserAction and launch it
* @param {Ecogesture} Ecogesture
* @returns {UserAction}
*/
public launchAction(ecogesture: Ecogesture): UserAction {
const userAction: UserAction = {
......@@ -184,8 +168,7 @@ export default class ActionService {
}
/**
* awaitNotificationAction
* @param {UserAction} UserAction
* @returns {UserAction} - updated user action
* @returns {UserAction} updated user action
*/
public awaitNotificationAction(userAction: UserAction): UserAction {
const updatedUserAction: UserAction = {
......@@ -196,8 +179,7 @@ export default class ActionService {
}
/**
* endAction
* @param {UserAction} UserAction
* @returns {UserAction} - updated user action
* @returns {UserAction} updated user action
*/
public endAction(userAction: UserAction): UserAction {
const updatedUserAction: UserAction = {
......@@ -208,8 +190,6 @@ export default class ActionService {
}
/**
* isActionDone - Set Action state to notification if progress > actionDuration
* @param {UserChallenge} currentChallenge
* @returns {Promise<UserChallenge | null>}
*/
public async isActionDone(
currentChallenge: UserChallenge
......
......@@ -56,7 +56,6 @@ export default class ChallengeService {
* Retrieve list of Userchallenge and unlock the current challenge if the last one is done
* If all challenges are locked, then unlock the first one
* @param {UserChallenge[]} userChallenges - status of fluids
* @returns {UserChallenge[]}
*/
public unLockCurrentUserChallenge(
userChallenges: UserChallenge[]
......@@ -77,7 +76,6 @@ export default class ChallengeService {
/**
* Retrieve UserChallenge from the UserChallengeEntity
* @param {UserChallengeEntity} userChallenges - status of fluids
* @returns {UserChallenge}
*/
public parseUserChallengeEntityToUserChallenge(
userChallengeEntity: UserChallengeEntity
......@@ -117,7 +115,6 @@ export default class ChallengeService {
/**
* Retrieve UserChallenge from the UserChallengeEntity
* @param {UserChallengeEntity} userChallenges - status of fluids
* @returns {UserChallenge}
*/
public parseChallengeEntityToUserChallenge(
challenge: ChallengeEntity,
......@@ -154,7 +151,6 @@ export default class ChallengeService {
/**
*
* @param {UserExploration | ExplorationEntity} exploration - Exploration to be tested
* @param {FluidStatus[]} fluidStatus
* @returns {boolean} isValid
*/
public async isExplorationConditionVerified(
......@@ -177,7 +173,6 @@ export default class ChallengeService {
/**
*
* @param {ChallengeEntity} challenge - get all relations entities of a challenge
* @returns {RelationEntitiesObject}
*/
public async getRelationEntities(
challenge: ChallengeEntity
......@@ -198,12 +193,6 @@ export default class ChallengeService {
/**
* Get a UserChallenge from its Entity and verify the exploration if there is a condition and if it's verified
* @param {UserExploration} exploration
* @param {ChallengeEntity} challenge
* @param {UserDuel} duel
* @param {UserQuiz} quiz
* @param {FluidStatus[]} fluidStatus
* @returns {UserChallenge}
*/
public async getUpdatedUserChallengeIfExplorationConditionIsValid(
exploration: UserExploration,
......@@ -243,13 +232,6 @@ export default class ChallengeService {
/**
* The whole exploration process, checks if the exploration fluid condition exists and is valid for each existing
* Exploration related to given challenge
* @param {ExplorationEntity[] | undefined} explorationEntities
* @param {Relation[]} explorationEntityRelation
* @param {ChallengeEntity} challenge
* @param {UserDuel} duel
* @param {UserQuiz} quiz
* @param {UserChallenge[]} buildList
* @param {FluidStatus[]} fluidStatus
* @returns {UserChallenge[]} - buildList
*/
public async processExploration(
......@@ -285,10 +267,6 @@ export default class ChallengeService {
}
/**
* Checks if the exploration condition exists and is valid when updating the buildList
* @param {UserChallenge} userChallenge
* @param {ChallengeEntity[]} challengeEntityList
* @param {FluidStatus[]} fluidStatus
* @returns {UserChallenge}
*/
public async loopVerificationExplorationCondition(
userChallenge: UserChallenge,
......@@ -336,8 +314,6 @@ export default class ChallengeService {
/**
* Retrieve UserChallenge list with all challenges
* @param {FluidStatus[]} fluidStatus
* @returns {UserChallenge[]}
*/
public async buildUserChallengeList(
fluidStatus: FluidStatus[]
......@@ -457,7 +433,6 @@ export default class ChallengeService {
/**
* Retrieve all ChallengeEntities
* @returns {ChallengeEntity[]}
*/
public async getAllChallengeEntities(): Promise<ChallengeEntity[]> {
const query: QueryDefinition = Q(CHALLENGE_DOCTYPE)
......@@ -468,7 +443,6 @@ export default class ChallengeService {
/**
* Delete all ChallengeEntities
* @returns {boolean}
* @throws {Error}
*/
public async deleteAllChallengeEntities(): Promise<boolean> {
......@@ -492,7 +466,6 @@ export default class ChallengeService {
/**
* Retrieve all UserChallengeEntities
* @returns {UserChallenge[]}
*/
public async getAllUserChallengeEntities(): Promise<UserChallenge[]> {
const query: QueryDefinition = Q(USERCHALLENGE_DOCTYPE)
......@@ -547,7 +520,6 @@ export default class ChallengeService {
/**
* Start UserChallenge and retrieve updated UserChallenge
* @returns {UserChallenge}
* @throws {Error}
*/
public async startUserChallenge(
......@@ -812,7 +784,6 @@ export default class ChallengeService {
* Retrieve the dataload for a UserChallenge with duel ongoing
* @param {UserChallenge} userChallenge - userChallenge to update
* @param {UserChallengeUpdateFlag} flag - update flag
* @returns {Dataload[]}
*/
public async getUserChallengeDataload(
userChallenge: UserChallenge
......@@ -844,7 +815,6 @@ export default class ChallengeService {
* Define if challenge is done and if is win or lost
* @param {UserChallenge} userChallenge - current userChallenge
* @param {Dataload[]} dataloads - dataloads of current challenge
* @returns {boolean, boolean}
*/
public async isChallengeDone(
userChallenge: UserChallenge,
......
......@@ -367,13 +367,9 @@ export default class ConsumptionDataManager {
/**
* Retrieves an array of fluid types that have incomplete data for a given month.
*
*
* Data is incomplete if at least one daily data is missing for the month.
*
* @param {FluidType[]} fluidTypes
* @param {DateTime} month - The month for which to check the data completeness.
* @returns {Promise<FluidType[]>}
*/
public async getFluidsWithIncompleteData(
fluidTypes: FluidType[],
......@@ -586,7 +582,6 @@ export default class ConsumptionDataManager {
/**
* getLastHourData
* @param {Client} client
* @param {number} month number
* @returns {Promise<DataloadEntity[]>} usageEvent added
*/
......@@ -609,8 +604,6 @@ export default class ConsumptionDataManager {
/**
* Get the first entry of a given data doctype (enedis, grdf, egl)
* @param doctype
* @returns
*/
public async getFirsDataDateFromDoctype(
doctype: Doctype
......
......@@ -34,7 +34,6 @@ export default class ConverterService {
* @param {FluidConfig} fluidConfig - Fluid configuration
* @param {number} load - Load value
* @param {number} [price] - Price if exist
* @returns {number}
*/
private applyPrice(
fluidConfig: FluidConfig,
......
......@@ -6,9 +6,6 @@ import ConfigService from './fluidConfig.service'
export default class DateChartService {
/**
* Define a time period for a given slide defined by its index
* @param referenceDate
* @param timeStep
* @param index
*/
public defineTimePeriod(
referenceDate: DateTime,
......@@ -93,7 +90,6 @@ export default class DateChartService {
* @param {DateTime} referenceDate - reference date
* @param {TimeStep} timeStep - time step
* @param {number} index - index
* @returns {DateTime}
*/
public defineFirstStepDate(
referenceDate: DateTime,
......@@ -109,7 +105,6 @@ export default class DateChartService {
* @param {DateTime} referenceDate - reference date
* @param {TimeStep} timeStep - time step
* @param {number} index - index
* @returns {DateTime}
*/
public defineLastStepDate(
referenceDate: DateTime,
......@@ -292,8 +287,6 @@ export default class DateChartService {
/**
* Checks if the last data date is outdated and returns the number of missing days
* @param {DateTime | null} lastDataDate
* @param {FluidType} fluidType
* @returns {number| null} - The number of missing days
*/
public isDataOutdated(
......
......@@ -30,7 +30,6 @@ export default class DuelService {
/**
* Retrieve period with data based on lastDataDate of the fluids
* @param {FluidStatus[]} fluidStatus - status of fluids
* @param {Duel} userDuel
* @returns {TimePeriod} - true when deleted with success
*/
private async getValidPeriod(
......@@ -67,10 +66,6 @@ export default class DuelService {
}
/**
* Check all period until find one with no empty value or return false
* @param period
* @param fluidType
* @param duration
* @returns {Promise<false | TimePeriod>}
*/
private async isPeriodComplete(
period: TimePeriod,
......@@ -116,7 +111,6 @@ export default class DuelService {
}
/**
* Retrieve all duel entities from db
* @returns {DuelEntity[]}
*/
public async getAllDuelEntities(): Promise<DuelEntity[]> {
const query: QueryDefinition = Q(DUEL_DOCTYPE)
......@@ -127,9 +121,7 @@ export default class DuelService {
/**
* Retrieve duel entities from db given the id
*
* @param {string} duelId - ID of the searched duel
* @returns {DuelEntity}
*/
public async getDuelEntityById(duelId: string): Promise<DuelEntity> {
const query: QueryDefinition = Q(DUEL_DOCTYPE)
......@@ -164,7 +156,6 @@ export default class DuelService {
/**
* Return duel with updated state to UserDuelState.UNLOCKED
* @param {UserDuel} userDuel - userDuel to unlock
* @returns {UserDuel}
*/
public async unlockUserDuel(userDuel: UserDuel): Promise<UserDuel> {
const updatedUserDuel: UserDuel = {
......@@ -187,9 +178,8 @@ export default class DuelService {
}
/**
* Return duel with updated thrshold and fluidTypes
* Return duel with updated threshold and fluidTypes
* @param {UserDuel} userDuel - userDuel to update
* @returns {UserDuel}
*/
public async updateUserDuelThreshold(
userDuel: UserDuel,
......@@ -241,7 +231,6 @@ export default class DuelService {
/**
* Return duel with updated state to UserDuelState.ONGOING and startDate
* @param {UserDuel} userDuel - userDuel to update
* @returns {UserDuel}
*/
public async startUserDuel(userDuel: UserDuel): Promise<UserDuel> {
const updatedUserDuel: UserDuel = {
......@@ -257,7 +246,6 @@ export default class DuelService {
/**
* Return duel with updated state to UserDuelState.DONE
* @param {UserDuel} userDuel - userDuel to update
* @returns {UserDuel}
*/
public async endUserDuel(userDuel: UserDuel): Promise<UserDuel> {
const updatedUserDuel: UserDuel = {
......@@ -270,7 +258,6 @@ export default class DuelService {
/**
* Return duel with updated state to UserDuelState.UNLOCKED
* @param {UserDuel} userDuel - userDuel to reset
* @returns {UserDuel}
*/
public async resetUserDuel(userDuel: UserDuel): Promise<UserDuel> {
return {
......@@ -285,7 +272,6 @@ export default class DuelService {
/**
* Return duel created from duel entity
* @param {DuelEntity} duel - userDuel to update
* @returns {Duel}
*/
public parseDuelEntityToDuel(duel: DuelEntity): UserDuel {
const userDuel: UserDuel = {
......@@ -306,7 +292,6 @@ export default class DuelService {
* Return duel created from duel entity
* @param {DuelEntity[]} duelEntityList - userDuel to update
* @param {string} searchId - userDuel to update
* @returns {UserDuel}
*/
public getDuelfromDuelEntities(
duelEntityList: DuelEntity[],
......
......@@ -156,7 +156,6 @@ export default class EcogestureService {
/**
* @param {string} ids - ecogestures ids
* @returns {Promise<Ecogesture[]>}
*/
public async getEcogesturesByIds(ids: string[]): Promise<Ecogesture[]> {
const query: QueryDefinition = Q(ECOGESTURE_DOCTYPE).getByIds(ids)
......@@ -208,9 +207,6 @@ export default class EcogestureService {
/**
* Removes ecogestures from the list that doesn't fit with user's usages
* @param {Ecogesture[]} ecogestureList
* @param {ProfileEcogesture} profileEcogesture
* @returns {Ecogesture[]}
*/
public filterByUsage(
ecogestureList: Ecogesture[],
......@@ -251,9 +247,6 @@ export default class EcogestureService {
/**
* Removes ecogesture from the list that depends on equipment the user hasn't
* @param {Ecogesture[]} ecogestureList
* @param {ProfileEcogesture} profileEcogesture
* @returns {Ecogesture[]}
*/
public filterByEquipment(
ecogestureList: Ecogesture[],
......@@ -274,8 +267,6 @@ export default class EcogestureService {
/**
* Return a filtered list according to ecogesture profile, the list is sorted by low difficulty and high efficiency
* @param {ProfileEcogesture} profileEcogesture
* @returns {Ecogesture[]}
*/
public async getEcogestureListByProfile(
profileEcogesture: ProfileEcogesture
......
......@@ -24,7 +24,6 @@ export default class EnedisMonthlyAnalysisDataService {
/**
* Retrieve all exploration entities from db
* @returns {EnedisMonthlyAnalysisData[]}
*/
public async getAllEnedisMonthlyAnalysisData(): Promise<
EnedisMonthlyAnalysisData[]
......@@ -40,8 +39,6 @@ export default class EnedisMonthlyAnalysisDataService {
/**
* getLastEnedisMonthlyAnalysis
* @param {Client} client
* @returns {Promise<EnedisMonthlyAnalysisData[]>}
*/
public async getLastEnedisMonthlyAnalysis(): Promise<
EnedisMonthlyAnalysisData[]
......@@ -57,8 +54,6 @@ export default class EnedisMonthlyAnalysisDataService {
/**
* Aggregates Enedis Analysis data in order to create Dataload injectable in graph component
* @param {EnedisMonthlyAnalysisData} data
* @returns {AggregatedEnedisMonthlyDataloads}
*/
public aggregateValuesToDataLoad = (
data: EnedisMonthlyAnalysisData
......@@ -105,9 +100,6 @@ export default class EnedisMonthlyAnalysisDataService {
/**
* Get an enedis monthly analysis for given month and year
* @param {number} year
* @param {number} month
* @returns {Promise<EnedisMonthlyAnalysisData[]>}
*/
public async getEnedisMonthlyAnalysisByDate(
year: number,
......@@ -125,8 +117,6 @@ export default class EnedisMonthlyAnalysisDataService {
/**
* Creates a new EnedisMonthlyAnalysis
* @param {EnedisMonthlyAnalysisData} newEnedisMonthlyAnalysisData
* @returns {Promise<EnedisMonthlyAnalysisData | null>}
*/
public async createEnedisMonthlyAnalysisData(
newEnedisMonthlyAnalysisData: EnedisMonthlyAnalysisData
......@@ -152,9 +142,6 @@ export default class EnedisMonthlyAnalysisDataService {
/**
* Get Max power for a given month and year
* @param {number} year
* @param {number} month
* @returns {Promise<MaxPowerEntity[]>}
*/
public async getMaxPowerByDate(
year: number,
......
......@@ -19,7 +19,6 @@ export default class ExplorationService {
/**
* Retrieve all exploration entities from db
* @returns {ExplorationEntity[]}
*/
public async getAllExplorationEntities(): Promise<ExplorationEntity[]> {
const query: QueryDefinition = Q(EXPLORATION_DOCTYPE)
......@@ -30,9 +29,7 @@ export default class ExplorationService {
/**
* Retrieve exploration entities from db given the id
*
* @param {string} explorationId - ID of the searched exploration
* @returns {ExplorationEntity}
*/
public async getExplorationEntityById(
explorationId: string
......@@ -65,7 +62,6 @@ export default class ExplorationService {
* Return exploration created from exploration entity
* @param {ExplorationEntity[]} explorationEntityList - userExploration to update
* @param {string} searchId - userExploration to update
* @returns {UserExploration}
*/
public getUserExplorationfromExplorationEntities(
explorationEntityList: ExplorationEntity[],
......@@ -102,8 +98,6 @@ export default class ExplorationService {
/**
* Return UserExploration created from ExplorationEntity
* @param {ExplorationEntity}
* @returns {UserExploration}
*/
public parseExplorationEntityToUserExploration(
exploration: ExplorationEntity
......@@ -121,7 +115,6 @@ export default class ExplorationService {
/**
* Return exploration with updated state to UserExplorationState.ONGOING
* @param {UserExploration} userExploration - userExploration to update
* @returns {UserExploration}
*/
public async startUserExploration(
userExploration: UserExploration
......@@ -136,7 +129,6 @@ export default class ExplorationService {
/**
* Return exploration with updated state to UserExplorationState.NOTIFICATION
* @param {UserExploration} userExploration - userExploration to update
* @returns {UserExploration}
*/
public async awaitNotificationUserExploration(
userExploration: UserExploration
......@@ -151,7 +143,6 @@ export default class ExplorationService {
/**
* Return exploration with updated state to UserExplorationState.DONE
* @param {UserExploration} userExploration - userExploration to update
* @returns {UserExploration}
*/
public endUserExploration(userExploration: UserExploration): UserExploration {
const updatedUserExploration: UserExploration = {
......@@ -165,9 +156,6 @@ export default class ExplorationService {
/**
* Return updated exploration
* @param {UserExploration} userExploration - userExploration to update
* @returns {UserExploration}
* @returns {questionIndex}
* @returns {questionResult}
*/
public async updateUserExploration(
userExploration: UserExploration
......@@ -185,7 +173,6 @@ export default class ExplorationService {
* Return updated UserChallenge with updated UserExploration
* @param {UserChallenge} currentChallenge - currentUserChallenge ongoing
* @param {string} explorationID - Id of the exploration
* @returns {UserChallenge}
*/
public async checkExploration(
currentChallenge: UserChallenge,
......