Envoi des données vers une autre URL

Edit me

Développement spécifique d’un composant EpiMob qui surchargerait la synchronisation standard en branchant celle-ci vers l’installation locale et en couvrant les traitements gérés normalement par le Hub (il n’y aurait donc plus besoin de Hub).

Environnement de dev de composant spécifique:

https://github.com/Epiconcept-Paris/epimob-addons

Bulk sur Epicraft

Key: epimob.widget
Value:

{
  component: 'SendDataToLocalServer',
  option: {
    sDatasetName: 'visite'
  }
}

Exemple de composant

// Library
import React from 'react';
import {View, Text} from 'react-native';
import {Button} from 'epimob-components'

const getManifestOptions = (oProject) => {
  if (typeof oProject !== 'object' || oProject === null) {
    return {};
  }

  const {oManifest} = oProject;
  if (typeof oManifest === 'object' && typeof oManifest.options === 'object') {
    return oManifest.options;
  }
  return {};
}

export default class SendDataToLocalServer extends React.PureComponent {
  constructor() {
    super();

    this.handleSend = this.handleSend.bind(this);
  }

  handleSend() {
    const {project: oProject, option: oWidgetOptions, datasets: aDatasets} = this.props;
    const oManifestOptions = getManifestOptions(oProject);
    const {sDatasetName} = oWidgetOptions;
    const oDataset = aDatasets.find(oDataset => oDataset.getName() === sDatasetName);
    if (oDataset === undefined) {
      return undefined;
    }

    const aRowsIds = oDataset.getRowDatasNotSaved().map(oRow => oRow._id);

    dangerouslyDispatchAction(
      'projects.message.sendXHR',
      // message à envoyer
      JSON.stringify(oDataset.toJson(aRowsIds, false)),
      // id du message (autogénéré si undefined)
      undefined,
      // propriétés du message
      {
        // nom du dataset
        sDatasetName,
        // liste des rows envoyés
        aRowsIds,
        // URL pour l'envoi
        sDestination: oManifestOptions.localServerURL
      }
    );
  }

  render() {
    const {project: oProject, option: oWidgetOptions} = this.props;
    const oManifestOptions = getManifestOptions(oProject);

    return (
      <View>
        <Text>URL du serveur: {oManifestOptions.localServerURL}</Text>
        <Text>Dataset name: {oWidgetOptions.sDatasetName}
        <Button onPress={this.handleSend}>Send</Button>
      </View>
    );
  }
}

SendDataToLocalServer.displayName = 'SendDataToLocalServer';

SendDataToLocalServer.defaultProps = {
  option: {
    sDatasetName: 'patient'
  }
}