diff --git a/.gitignore b/.gitignore index ecdfc0f28f..7fef02cc7e 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ yarn-error.log* .eslintcache tsconfig.tsbuildinfo + +.idea \ No newline at end of file diff --git a/app/Base/configs/env.ts b/app/Base/configs/env.ts index 7881b2eca5..2c2c0aa399 100644 --- a/app/Base/configs/env.ts +++ b/app/Base/configs/env.ts @@ -1,8 +1,8 @@ export const myApp = process.env.MY_APP_ID; export const appCommitHash = process.env.REACT_APP_COMMITHASH; -export const deepEnvironment = process.env.REACT_APP_DEEP_ENVIRONMENT || 'dev'; -export const isDebugMode = process.env.REACT_APP_DEBUG_MODE?.toLowerCase() === 'true'; +export const deepEnvironment = process.env.REACT_APP_DEEP_ENVIRONMENT || 'prod'; +export const isDebugMode = process.env.REACT_APP_DEBUG_MODE?.toLowerCase() === 'false'; // Endpoints // TODO: Make api endpoint environment variables consistent with protocol and domain diff --git a/app/Base/configs/routes.tsx b/app/Base/configs/routes.tsx index 890ca25989..3dbcfaa451 100644 --- a/app/Base/configs/routes.tsx +++ b/app/Base/configs/routes.tsx @@ -313,7 +313,9 @@ const analysis = wrap({ }, visibility: 'is-authenticated', checkPermissions: (user, project, skipProjectPermissionCheck) => { - const accessAnalysisModule = !!user?.accessibleFeatures?.some((f) => f.key === 'ANALYSIS'); + // const accessAnalysisModule = + // !!user?.accessibleFeatures?.some((f) => f.key === 'ANALYSIS'); + const accessAnalysisModule = true; if (!accessAnalysisModule) { return false; } @@ -339,7 +341,9 @@ const pillarAnalysis = wrap({ }, visibility: 'is-authenticated', checkPermissions: (user, project, skipProjectPermissionCheck) => { - const accessAnalysisModule = !!user?.accessibleFeatures?.some((f) => f.key === 'ANALYSIS'); + // const accessAnalysisModule = + // !!user?.accessibleFeatures?.some((f) => f.key === 'ANALYSIS'); + const accessAnalysisModule = true; if (!accessAnalysisModule) { return false; } diff --git a/app/views/ProjectEdit/Connector/EditConnectorModal/ConnectorSourceForm/KoboToolboxParamsInput/index.tsx b/app/views/ProjectEdit/Connector/EditConnectorModal/ConnectorSourceForm/KoboToolboxParamsInput/index.tsx new file mode 100644 index 0000000000..9e459aa256 --- /dev/null +++ b/app/views/ProjectEdit/Connector/EditConnectorModal/ConnectorSourceForm/KoboToolboxParamsInput/index.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import { + TextInput, + DateDualRangeInput, +} from '@the-deep/deep-ui'; + +import { + SetValueArg, + Error, + useFormObject, + getErrorObject, + getErrorString, +} from '@togglecorp/toggle-form'; + +import NonFieldError from '#components/NonFieldError'; + +import { + KoboParams, +} from '../../../types'; + +const koboDefaultValues: KoboParams = {}; + +interface Props { + name: T; + value: KoboParams | undefined | null; + error: Error; + onChange: (val: SetValueArg, name: T) => void; + disabled?: boolean; +} + +function KoboParamsInput(props: Props) { + const { + name, + value, + error: riskyError, + onChange, + disabled, + } = props; + const error = getErrorObject(riskyError); + const setParamsFieldValue = useFormObject(name, onChange, value ?? koboDefaultValues); + + return ( + <> + + + + + ); +} + +export default KoboParamsInput; diff --git a/app/views/ProjectEdit/Connector/EditConnectorModal/ConnectorSourceForm/index.tsx b/app/views/ProjectEdit/Connector/EditConnectorModal/ConnectorSourceForm/index.tsx index bbcce4c392..2c8a519eed 100644 --- a/app/views/ProjectEdit/Connector/EditConnectorModal/ConnectorSourceForm/index.tsx +++ b/app/views/ProjectEdit/Connector/EditConnectorModal/ConnectorSourceForm/index.tsx @@ -22,6 +22,7 @@ import AtomFeedParamsInput from './AtomFeedParamsInput'; import UnhcrParams from './UnhcrParamsInput'; import HumanitarianResponseParamsInput from './HumanitarianResponseParamsInput'; import PdnaParamsInput from './PdnaParamsInput'; +import KoboParamsInput from './KoboToolboxParamsInput'; import styles from './styles.css'; @@ -91,6 +92,15 @@ function ConnectorSourceForm(props: Props) { disabled={disabled} /> )} + {value.source === 'KOBO' && ( + + )} {value.source === 'HUMANITARIAN_RESP' && ( item; diff --git a/app/views/ProjectEdit/Connector/schema.ts b/app/views/ProjectEdit/Connector/schema.ts index e62df789f4..6f65763431 100644 --- a/app/views/ProjectEdit/Connector/schema.ts +++ b/app/views/ProjectEdit/Connector/schema.ts @@ -70,9 +70,34 @@ export const sourceSchema:SourceFormSchema = { case 'UNHCR': { const params: ObjectSchema> = { fields: () => ({ + country: [], date_from: [], date_to: [], - country: [], + }), + validation: (paramsValue) => { + if ( + paramsValue + && paramsValue.date_to + && paramsValue.date_from + && new Date(paramsValue.date_from) > new Date(paramsValue.date_to) + ) { + return '"From" date should be smaller than "To" date'; + } + return undefined; + }, + }; + return { + ...baseSchema, + params, + }; + } + case 'KOBO': { + const params: ObjectSchema> = { + fields: () => ({ + date_from: [], + date_to: [], + project_id: [requiredStringCondition], + token: [requiredStringCondition], }), validation: (paramsValue) => { if ( @@ -140,6 +165,7 @@ export const sourceSchema:SourceFormSchema = { 'url-field': [requiredStringCondition], }), }; + return { ...baseSchema, params, diff --git a/app/views/ProjectEdit/Connector/types.ts b/app/views/ProjectEdit/Connector/types.ts index 3bfe5b2b9f..89e08c56a5 100644 --- a/app/views/ProjectEdit/Connector/types.ts +++ b/app/views/ProjectEdit/Connector/types.ts @@ -711,6 +711,13 @@ export interface AtomFeedParams { 'url-field': string; } +export interface KoboParams { + project_id?: string; + token?: string; + date_from?: string; + date_to?: string; +} + export interface HumanitarianResponseParams { country?: string; } @@ -745,6 +752,9 @@ export type SourceInput = Omit(); const userId = user?.id; - const isConnectorsAccessible = !!user - ?.accessibleFeatures?.some((feature) => feature.key === 'CONNECTORS'); + const isConnectorsAccessible = true; + + // const isConnectorsAccessible = !!user + // ?.accessibleFeatures?.some((feature) => feature.key === 'CONNECTORS'); const handleCreate = useCallback( (newProjectId: string) => { diff --git a/app/views/Tagging/UnifiedConnectorModal/LeadsPane/index.tsx b/app/views/Tagging/UnifiedConnectorModal/LeadsPane/index.tsx index b1f0bec8d8..7320a4db9b 100644 --- a/app/views/Tagging/UnifiedConnectorModal/LeadsPane/index.tsx +++ b/app/views/Tagging/UnifiedConnectorModal/LeadsPane/index.tsx @@ -227,6 +227,7 @@ interface Props { setFormFieldValue: (...entries: EntriesAsList) => void; disabled: boolean; } +let csvUrlDerived: string | undefined; function LeadsPane(props: Props) { const { @@ -299,7 +300,16 @@ function LeadsPane(props: Props) { } const suggestedLead = connectorSourceLead.connectorLead; - + let urlDerived; + + try { + const urlObject = JSON.parse(suggestedLead.url.replace(/'/g, '"')); + urlDerived = urlObject.pdf; + csvUrlDerived = urlObject.csv; + } catch (error) { + urlDerived = suggestedLead.url; + csvUrlDerived = undefined; + } const newLead = { clientId: randomString(), sourceType: 'WEBSITE' as const, @@ -308,7 +318,8 @@ function LeadsPane(props: Props) { isAssessmentLead: false, assignee: user?.id, - url: suggestedLead.url, + url: urlDerived, + csvUrl: csvUrlDerived, title: suggestedLead.title, publishedOn: suggestedLead.publishedOn, authors: suggestedLead.authors.map((item) => item.id), @@ -724,6 +735,25 @@ function LeadsPane(props: Props) { contentClassName={styles.content} headerActions={( <> + {getCsvUrlDerived() && ( + + )}