0

I wish to insert multiple customers to a booking using ReferenceArrayInput but when I use it the Create page won't render at all.

in bookings.js:

 export const BookingCreate = (props) => (
    <Create {...props}>
        <SimpleForm>
            <ReferenceInput label="Customer" source="customer_id" reference="customers" allowEmpty>
                <SelectInput optionText="customer_name" />
            </ReferenceInput>   
            <ReferenceArrayInput source="customer_ids" reference="customers">
                <SelectArrayInput optionText="customer_name" />
            </ReferenceArrayInput>
        </SimpleForm>
    </Create>
);

I am very new to react and javascript and apis. I suspect that I may have written incorrect/missing apis. ReferenceInput works fine so I am quite confused.

If someone could please explain to me what api is being called for ReferenceArrayInput and how I should handle it and provide an example of what should the response contain I would be very thankful. I've already gone through the documentation but I still cannot understand it.

This is the error I got from the web console when trying to access the Create page:

  Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in. Check the render method of `BookingCreate`.  bundle.js:1090:15
    invariant http://localhost:3000/static/js/bundle.js:1090:15
    instantiateReactComponent http://localhost:3000/static/js/bundle.js:41629:23
    performInitialMount http://localhost:3000/static/js/bundle.js:99988:17
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104483:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101351:27
    mountComponent http://localhost:3000/static/js/bundle.js:101170:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104483:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101351:27
    mountComponent http://localhost:3000/static/js/bundle.js:101170:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104483:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101351:27
    mountComponent http://localhost:3000/static/js/bundle.js:101170:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104483:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101351:27
    mountComponent http://localhost:3000/static/js/bundle.js:101170:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104483:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101351:27
    mountComponent http://localhost:3000/static/js/bundle.js:101170:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104483:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101351:27
    mountComponent http://localhost:3000/static/js/bundle.js:101170:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99992:18
    mountComponent http://localhost:3000/static/js/bundle.js:99879:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100386:24
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100345:5
    updateComponent http://localhost:3000/static/js/bundle.js:100266:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100168:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100375:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100345:5
    updateComponent http://localhost:3000/static/js/bundle.js:100266:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100168:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100375:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100345:5
    updateComponent http://localhost:3000/static/js/bundle.js:100266:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100168:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100375:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100345:5
    updateComponent http://localhost:3000/static/js/bundle.js:100266:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100168:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100375:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100345:5
    updateComponent http://localhost:3000/static/js/bundle.js:100266:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100168:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100375:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100345:5
    updateComponent http://localhost:3000/static/js/bundle.js:100266:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100168:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100375:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100345:5
    updateComponent http://localhost:3000/static/js/bundle.js:100266:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100168:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100375:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100345:5
    updateComponent http://localhost:3000/static/js/bundle.js:100266:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100168:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    updateChildren http://localhost:3000/static/js/bundle.js:99525:9
    _reconcilerUpdateChildren http://localhost:3000/static/js/bundle.js:104453:11
    _updateChildren http://localhost:3000/static/js/bundle.js:104557:26
    updateChildren http://localhost:3000/static/js/bundle.js:104544:7
    _updateDOMChildren http://localhost:3000/static/js/bundle.js:101590:7
    updateComponent http://localhost:3000/static/js/bundle.js:101408:5
    receiveComponent http://localhost:3000/static/js/bundle.js:101370:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    updateChildren http://localhost:3000/static/js/bundle.js:99525:9
    _reconcilerUpdateChildren http://localhost:3000/static/js/bundle.js:104453:11
    _updateChildren http://localhost:3000/static/js/bundle.js:104557:26
    updateChildren http://localhost:3000/static/js/bundle.js:104544:7
    _updateDOMChildren http://localhost:3000/static/js/bundle.js:101590:7
    updateComponent http://localhost:3000/static/js/bundle.js:101408:5
    receiveComponent http://localhost:3000/static/js/bundle.js:101370:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    updateChildren http://localhost:3000/static/js/bundle.js:99525:9
    _reconcilerUpdateChildren http://localhost:3000/static/js/bundle.js:104453:11
    _updateChildren http://localhost:3000/static/js/bundle.js:104557:26
    updateChildren http://localhost:3000/static/js/bundle.js:104544:7
    _updateDOMChildren http://localhost:3000/static/js/bundle.js:101590:7
    updateComponent http://localhost:3000/static/js/bundle.js:101408:5
    receiveComponent http://localhost:3000/static/js/bundle.js:101370:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    updateChildren http://localhost:3000/static/js/bundle.js:99525:9
    _reconcilerUpdateChildren http://localhost:3000/static/js/bundle.js:104453:11

Trying to get ReferenceArrayInput to work I then went on to try to get SelectArrayInput to work but when I tried it it gave the same issue of causing the Create page to not render.

From my testing/possibly misguided understanding, I am under the impression that for SelectArrayInput to display on my Create page I would not even have to have any apis or variables written for it yet and that would only become an issue after the api call has been made with input from SelectArrayInput.

using bookings.js as example:

export const BookingCreate = (props) => (
     <Create {...props}>
        <SimpleForm>
           <SelectArrayInput source="categories" choices={[
            { id: 'music', name: 'Music' },
            { id: 'photography', name: 'Photo' },
            { id: 'programming', name: 'Code' },
            { id: 'tech', name: 'Technology' },
            { id: 'sport', name: 'Sport' },
           ]} />
           <SelectInput source="category" choices={[
            { id: 'programming', name: 'Programming' },
            { id: 'lifestyle', name: 'Lifestyle' },
            { id: 'photography', name: 'Photography' },
        ]} />
        </SimpleForm>
    </Create>
);

I got the same error for SelectArrayInput in the web console as well:

Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in. Check the render method of `BookingCreate`.  bundle.js:1090:15
    invariant http://localhost:3000/static/js/bundle.js:1090:15
    instantiateReactComponent http://localhost:3000/static/js/bundle.js:41629:23
    performInitialMount http://localhost:3000/static/js/bundle.js:99985:17
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104480:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101348:27
    mountComponent http://localhost:3000/static/js/bundle.js:101167:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104480:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101348:27
    mountComponent http://localhost:3000/static/js/bundle.js:101167:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104480:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101348:27
    mountComponent http://localhost:3000/static/js/bundle.js:101167:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104480:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101348:27
    mountComponent http://localhost:3000/static/js/bundle.js:101167:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104480:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101348:27
    mountComponent http://localhost:3000/static/js/bundle.js:101167:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    mountChildren http://localhost:3000/static/js/bundle.js:104480:28
    _createInitialChildren http://localhost:3000/static/js/bundle.js:101348:27
    mountComponent http://localhost:3000/static/js/bundle.js:101167:7
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    performInitialMount http://localhost:3000/static/js/bundle.js:99989:18
    mountComponent http://localhost:3000/static/js/bundle.js:99876:16
    mountComponent http://localhost:3000/static/js/bundle.js:12123:18
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100383:24
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100342:5
    updateComponent http://localhost:3000/static/js/bundle.js:100263:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100165:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100372:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100342:5
    updateComponent http://localhost:3000/static/js/bundle.js:100263:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100165:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100372:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100342:5
    updateComponent http://localhost:3000/static/js/bundle.js:100263:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100165:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100372:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100342:5
    updateComponent http://localhost:3000/static/js/bundle.js:100263:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100165:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100372:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100342:5
    updateComponent http://localhost:3000/static/js/bundle.js:100263:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100165:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100372:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100342:5
    updateComponent http://localhost:3000/static/js/bundle.js:100263:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100165:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100372:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100342:5
    updateComponent http://localhost:3000/static/js/bundle.js:100263:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100165:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    _updateRenderedComponent http://localhost:3000/static/js/bundle.js:100372:7
    _performComponentUpdate http://localhost:3000/static/js/bundle.js:100342:5
    updateComponent http://localhost:3000/static/js/bundle.js:100263:7
    receiveComponent http://localhost:3000/static/js/bundle.js:100165:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    updateChildren http://localhost:3000/static/js/bundle.js:99522:9
    _reconcilerUpdateChildren http://localhost:3000/static/js/bundle.js:104450:11
    _updateChildren http://localhost:3000/static/js/bundle.js:104554:26
    updateChildren http://localhost:3000/static/js/bundle.js:104541:7
    _updateDOMChildren http://localhost:3000/static/js/bundle.js:101587:7
    updateComponent http://localhost:3000/static/js/bundle.js:101405:5
    receiveComponent http://localhost:3000/static/js/bundle.js:101367:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    updateChildren http://localhost:3000/static/js/bundle.js:99522:9
    _reconcilerUpdateChildren http://localhost:3000/static/js/bundle.js:104450:11
    _updateChildren http://localhost:3000/static/js/bundle.js:104554:26
    updateChildren http://localhost:3000/static/js/bundle.js:104541:7
    _updateDOMChildren http://localhost:3000/static/js/bundle.js:101587:7
    updateComponent http://localhost:3000/static/js/bundle.js:101405:5
    receiveComponent http://localhost:3000/static/js/bundle.js:101367:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    updateChildren http://localhost:3000/static/js/bundle.js:99522:9
    _reconcilerUpdateChildren http://localhost:3000/static/js/bundle.js:104450:11
    _updateChildren http://localhost:3000/static/js/bundle.js:104554:26
    updateChildren http://localhost:3000/static/js/bundle.js:104541:7
    _updateDOMChildren http://localhost:3000/static/js/bundle.js:101587:7
    updateComponent http://localhost:3000/static/js/bundle.js:101405:5
    receiveComponent http://localhost:3000/static/js/bundle.js:101367:5
    receiveComponent http://localhost:3000/static/js/bundle.js:12202:5
    updateChildren http://localhost:3000/static/js/bundle.js:99522:9
    _reconcilerUpdateChildren http://localhost:3000/static/js/bundle.js:104450:11

SelectInput works just fine. Why?

I really appreciate any help. This has been troubling me for days.

ronald_94
  • 1
  • 1
  • Did you see any error messages in the browser console? – wesley6j Jun 22 '17 at 22:03
  • @wesley6j Thanks for your time. I've included the error logs in the edited post. – ronald_94 Jun 23 '17 at 02:51
  • From the error message `Element type is invalid ... undefined`, I guess it's because you did not import some components from AOR properly? – wesley6j Jun 23 '17 at 14:36
  • Not directly related to this problem, but if you add eslint to your development workflow, this kind of problems should be easier to detect. – wesley6j Jun 23 '17 at 17:50
  • I'm not sure what components I did not import correctly. I thought all I needed to import was ReferenceArrayInput and SelectArrayInput from AOR? They are included in my import statement. – ronald_94 Jun 24 '17 at 13:10

1 Answers1

0

customer_name must be in each customer in response

<ReferenceInput label="Customer" source="customer_id" reference="customers" allowEmpty>
    <SelectInput optionText="customer_name" />
</ReferenceInput>

i know that it's simple but for me much clearly if i can say how it should works. it's literally mean: "i try write customer_id to my object. for begin go to server to customers and get records. when i choose one of them to SelectInput write customer_name"

<ReferenceArrayInput source="customer_ids" reference="customers">
    <SelectArrayInput optionText="customer_name" />
</ReferenceArrayInput>

"i try write customer_ids to my object. for begin go to server to customers and get records. when i choose one of them to SelectInput write customer_name"

once again, sorry for the obvious things.

if your problem is still actual now, please, write one json object customer

Alexey
  • 601
  • 7
  • 17
  • Thank you for your time. My ReferenceInput does work and customer_name is included in each customer object in the response. That is why I was surprised that ReferenceArrayInput does not work. It does not even make any sort of API call that I can see in network. It just fails to render the entire page. I think that I might be missing some sort of API as it seems like ReferenceArrayInput is not using the same one as ReferenceInput otherwise it should work. I've already read through the documentation. Can you give me a working example of the API call that ReferenceArrayInput does make? – ronald_94 Jun 25 '17 at 20:53
  • ReferenceInput works because GET_LIST is returning the expected response but I'm not really sure what the CRUD_GET_MANY and the CRUD_GET_MATCHING Rest APIs are in the documentation. Could I be missing those? Can you give me examples of an API call that they would make and the response I would have to give to get this to work? Thanks for the help! – ronald_94 Jun 25 '17 at 21:15
  • Yes, but later(12 hours later). I can give code example. One moment: your book must have an array of customer id - customer_ids. This array will send to API. But probably it is so obviously. – Alexey Jun 25 '17 at 23:04
  • in my case my POST request to create record contains `{"models":[{"account_ids":[999112,999111],"title":"aaaaaaa","text":"bbbbbbbbbbbbbbbbbbbbbbbbbb"}],"client":"client1"}` . my form includes ` ` . AOR do GET request to my api `/api/accounts?page=1&per_page=25&sort_by=id&sort=DESC` and now i can not give my api url because it is not open source project. did you mean this information? – Alexey Jun 26 '17 at 08:38