{
    "componentChunkName": "component---src-templates-doc-page-jsx",
    "path": "/vue-data-grid/rxjs/",
    "result": {"data":{"markdownRemark":{"htmlAst":{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"It is possible to use RxJS with AG Grid - with the rich "},{"type":"element","tagName":"a","properties":{"href":"/archive/28.2.1/grid-api/"},"children":[{"type":"text","value":"API"}]},{"type":"text","value":" and numerous "},{"type":"element","tagName":"a","properties":{"href":"/archive/28.2.1/data-update/"},"children":[{"type":"text","value":"Data Update Options"}]},{"type":"text","value":" the two can interoperate very well."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"There are many ways you can use RxJS with AG Grid. Below we describe two ways to do updates: One that processes just updated rows, and another that supplies the full Row Dataset but with altered rows within it."}]},{"type":"element","tagName":"h2","properties":{"id":"option-1---providing-just-updated-data","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#option-1---providing-just-updated-data","ariaLabel":"option 1   providing just updated data permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","dataPrefix":"fas","dataIcon":"link","className":["svg-inline--fa","fa-link"],"role":"img","xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 512 512"},"children":[{"type":"element","tagName":"path","properties":{"fill":"currentColor","d":"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"},"children":[]}]}]},{"type":"text","value":"Option 1 - Providing Just Updated Data"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In this example we provide the initial data via a subscription, then provide updates via another."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The second subscription only provides changed rows - it does not provide the full dataset once again."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"To efficiently process this data we need the following:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"A unique key per row - we do this by making use of the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"getRowId"}]},{"type":"text","value":" callback:"}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"snippet","properties":{},"children":[{"type":"text","value":"\nconst gridOptions = {\n    getRowId: params => {\n        // the code is unique, so perfect for the ID\n        return params.data.code;\n    }\n}\n"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"A manner of letting AG Grid know the type of update we're doing - for this we make use of the "},{"type":"element","tagName":"a","properties":{"href":"/archive/28.2.1/data-update/"},"children":[{"type":"text","value":"Transaction"}]},{"type":"text","value":" method:"}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"snippet","properties":{},"children":[{"type":"text","value":"\nupdates$.subscribe(update => gridOptions.api.applyTransaction({ update: update }));\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"With these two pieces of code we can supply the updates to AG Grid and the grid will only re-render the changes rows, resulting\nin much improved performance."}]},{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"grid-example","properties":{"title":"RxJS - Row Updates","name":"rxjs-updates","type":"generated","options":"{ \"enterprise\": true, \"extras\": [\"lodash\", \"rxjs\", \"bluebirdjs\"], \"modules\": [\"clientside\", \"rowgrouping\"] }"},"children":[]}]},{"type":"element","tagName":"h2","properties":{"id":"option-2---providing-full-row-data-with-updates-within","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#option-2---providing-full-row-data-with-updates-within","ariaLabel":"option 2   providing full row data with updates within permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","dataPrefix":"fas","dataIcon":"link","className":["svg-inline--fa","fa-link"],"role":"img","xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 512 512"},"children":[{"type":"element","tagName":"path","properties":{"fill":"currentColor","d":"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"},"children":[]}]}]},{"type":"text","value":"Option 2 - Providing Full Row Data With Updates Within"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In this example we provide the initial data via a subscription, then provide updates via another, as above."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This time however the second subscription has the full row data, with altered row data within the full dataset."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"To efficiently process this data we need two things:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"A unique key per row - we do this by making use of the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"getRowId"}]},{"type":"text","value":" callback."}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"snippet","properties":{"spacebetweenproperties":"true"},"children":[{"type":"text","value":"\nconst gridOptions = {\n    getRowId: params => {\n        // the code is unique, so perfect for the ID\n        return params.data.code;\n    }\n}\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"With this configuration we can supply the updates to AG Grid and the grid will only re-render the changed rows, resulting in much improved performance."}]},{"type":"element","tagName":"snippet","properties":{},"children":[{"type":"text","value":"\n updates$ = mockServer.allDataUpdates();    \n updates$.subscribe(function (newRowData) {\n     return params.api.setRowData(newRowData);\n });\n"}]},{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"grid-example","properties":{"title":"RxJS - Full Updates","name":"rxjs-full","type":"generated","options":"{ \"enterprise\": true, \"extras\": [\"lodash\", \"rxjs\", \"bluebirdjs\"], \"modules\": [\"clientside\", \"rowgrouping\"] }"},"children":[]}]},{"type":"element","tagName":"div","properties":{"className":["custom-block","angular-only-section"]},"children":[{"type":"element","tagName":"div","properties":{"className":["custom-block-body"]},"children":[{"type":"element","tagName":"h3","properties":{"id":"async-pipe","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#async-pipe","ariaLabel":"async pipe permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","dataPrefix":"fas","dataIcon":"link","className":["svg-inline--fa","fa-link"],"role":"img","xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 512 512"},"children":[{"type":"element","tagName":"path","properties":{"fill":"currentColor","d":"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"},"children":[]}]}]},{"type":"text","value":"Async Pipe"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In the example above we manually subscribe to the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"updates$"}]},{"type":"text","value":" observable and call "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"api.setRowData"}]},{"type":"text","value":" to update the grid. One potential downside of this approach is that we |must remember to clean up this subscription when we are finished with it. "}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Alternatively, we can take advantage of the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"async"}]},{"type":"text","value":" pipe to manage the Subscription for us. Using the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"async"}]},{"type":"text","value":" pipe we can provide the updates directly to the grid."}]},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"html"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-html"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-html"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","tag"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","tag"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"<"}]},{"type":"text","value":"ag-grid-angular"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":">"}]}]},{"type":"text","value":"\n   [rowData]=\"updates$ | async\"\n"},{"type":"element","tagName":"span","properties":{"className":["token","tag"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","tag"]},"children":[{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":"</"}]},{"type":"text","value":"ag-grid-angular"}]},{"type":"element","tagName":"span","properties":{"className":["token","punctuation"]},"children":[{"type":"text","value":">"}]}]}]}]}]}]}]}]},"frontmatter":{"title":"Use with RxJS","version":null,"enterprise":null,"description":null},"headings":[{"id":"option-1---providing-just-updated-data","depth":2,"value":"Option 1 - Providing Just Updated Data"},{"id":"option-2---providing-full-row-data-with-updates-within","depth":2,"value":"Option 2 - Providing Full Row Data With Updates Within"},{"id":"async-pipe","depth":3,"value":"Async Pipe"}]}},"pageContext":{"frameworks":["angular","react","vue"],"framework":"vue","srcPath":"/rxjs","pageName":"rxjs"}},
    "staticQueryHashes": ["1766026005","699667431","940729948"]}