gor181 / react-notification-system-redux Goto Github PK
View Code? Open in Web Editor NEWRedux wrapper for react-notification-system
License: MIT License
Redux wrapper for react-notification-system
License: MIT License
Hi, what do you think about improve the docs. I recently have issue when DemoComponent
which is showed up in the docs didn't use properly.
It should be imported at the top level component in the application, so when the user dispatch the action as suggested at the next step of the docs, it will show the DemoComponent
.
The docs should also info that the notifications
props cannot be renamed, otherwise it will turn error.
Can't we remove context api from this module ? Because react not recommend using that Api.
This lib support immutable?
I added the log file because I was unable to create the release build. I change line 61 of the package.json to "release": "set NODE_ENV=production && gulp release", because I am using a Windows based system.
Thanks
Hi. Is it possible to clear all notifications?
In react-notification-system-redux there is function clearNotifications, could not find similar here.
I think there's an issue with version 1.1.5, seems related to this comment on another issue.
TypeError: _reactNotificationSystemRedux2.default.success is not a function
hi @gor181 , i found this
react-notification-system-redux/src/notifications.js
Lines 29 to 31 in 90d3271
you override the notification 's onRemove
function, can you tell me how to use the onRemove
in the options ?
i think
onRemove: () => {
this.context.store.dispatch(actions.hide(notification.uid));
}
should be
onRemove: () => {
this.context.store.dispatch(actions.hide(notification.uid));
if(notification.onRemove) notification.OnRemove(notification);
}
importing react-notification-system-redux into my application increases the size by ~1.45 MB for me, as opposed to only react-notification-system, which adds 60 KB.
Not sure what's up, but it's not good.
I LOVE this library, very elegant. I want to use it beyond it's intended purpose as well, to display some bulk edit elements as I select them from a list. Is there a way to re-render the message
prop so as I add elements, the message bosy updates? I'm trying something like this:
toggleRowsWithBulkEdit(item) {
const rowsWithBulkEdit = toggleBulkEditItem(this.state.rowsWithBulkEdit, item)
this.setState({rowsWithBulkEdit})
const makeMessage = bulkEditProps => {
console.log(bulkEditProps)
return (
<BulkEdit {...bulkEditProps}/>
)
}
this.props.showNotification({
title: 'hi',
message: makeMessage({
rowsWithBulkEdit,
}),
autoDismiss: 0,
position: 'br',
uid: 'bulkEditing',
}, 'info')
}
and the console.log
inside makeMessage
is displaying the proper list, but obviously if I console log inside the BulkEdit
component, it remains at 1.
The UMD module won't work inside an AMD environment like RequireJS. See JedWatson/react-component-gulp-tasks#8
Following you example and getting an error when trying to pass a function as an argument to the dispatch call.
Your Example:
setTimeout(() => {
this.context.store.dispatch(fn(notificationOpts));
}, timeout);
}
handleClick() {
this.dispatchNotification(success, 250);
this.dispatchNotification(error, 500);
this.dispatchNotification(warning, 750);
this.dispatchNotification(info, 1000);
}
When I try this on my machine I get an error saying:
Uncaught TypeError: _reactNotificationSystemRedux2.default.fn is not a function
Below is my code:
import Notifications, { success, error, warning, info, removeAll } from 'react-notification-system-redux';
export const notifyErrorAction = (fn, notification) => dispatch => {
dispatch(Notifications.fn({
title: notification.title,
message: notification.message,
position: 'tr',
autoDismiss: 5000,
})
)
}
const notification = {
title: 'Error',
message: 'There is an error'
}
this.props.notifyError(error, notification)
The this.props.notifyError()
is being called and does pass the error()
to notifyErrorAction()
. When I log out fn
in the notifyErrorAction()
I get:
ฦ error(opts) {
return show(opts, 'error');
}
I'm not sure if there is a step I'm missing. The only difference I can see is that you called dispatchNotification
with a timeout. Was this just for effect or does the timing matter?
Edit method available in https://github.com/igorprado/react-notification-system
Hi. First off, this Notification Center works great. Thanks for making it.
There's a small API improvement I'd like to suggest though.
Instead of importing the entire Notifications
object, and calling .show
, .info
, ... functions on it. It would be nicer if you could import those functions directly.
So instead of:
import Notifications from 'react-notification-system-redux';
dispatch(Notifications.show(notification, level));
dispatch(Notifications.success(notification));
dispatch(Notifications.error(notification));
dispatch(Notifications.warning(notification));
dispatch(Notifications.info(notification));
dispatch(Notifications.hide(uid)); // Hides notification based on uid
dispatch(Notifications.removeAll()); // Removes all notifications
You will have:
import { show, success, error, warning, info, hide, removeAll } from 'react-notification-system-redux';
dispatch(show(notification, level));
dispatch(success(notification));
dispatch(error(notification));
dispatch(warning(notification));
dispatch(info(notification));
dispatch(hide(uid)); // Hides notification based on uid
dispatch(removeAll()); // Removes all notifications
You of course only would have to import the one's you need. And if one of the function names clashes with existing functions (for the importer). They could always do
import { show a showNotification } from 'react-notification-system-redux'
Or something like that.
Keep up the good work!
Seems that this line is not compatible with the 6th version of react-redux:
The component should probably be wrapped into connect()
HOC.
Hey,
I am passing notification in my dispatchNotification method. So, I wanna pass multiple error and show a bunch of notification. How can I pass "message" like an array?
dispatchNotification(status, message) {
const notificationOpts = {
message,
position: 'tc'
};
if (status === 'success') {
this.props.success(notificationOpts);
}
if (status === 'error') {
this.props.error(notificationOpts);
}
}
I'm currently investigating issue related to notification not being displayed after route change. Following scenario describes the case:
history.push('/some-url')
Following pseudo-code presents that:
function onSuccess(data){
dispatch(Notifications.success( .... ));
history.push('/some-url');
}
Here's list of dependencies:
"axios": "^0.16.2",
"common-tags": "^1.4.0",
"immutability-helper": "^2.3.0",
"jwt-decode": "^2.2.0",
"prop-types": "^15.5.10",
"query-string": "^5.0.0",
"react": "^15.5.4",
"react-autosize-textarea": "^0.4.8",
"react-bootstrap": "^0.31.0",
"react-bootstrap-typeahead": "^2.0.0-alpha.1",
"react-collapsible": "^1.5.0",
"react-cookies": "0.0.1",
"react-dom": "^15.5.4",
"react-html-id": "^0.1.1",
"react-notification-system": "^0.2.14",
"react-notification-system-redux": "^1.1.4",
"react-numeric-input": "^2.0.7",
"react-redux": "^5.0.5",
"react-router-bootstrap": "^0.24.2",
"react-router-dom": "^4.1.1",
"redux": "^3.6.0",
"redux-form": "^6.7.0",
"redux-thunk": "^2.2.0"
I'm relatively new to React and Redux and I'm trying to build minimal app which reproduces that issue but maybe you could figure out faster what's going on.
https://github.com/gor181/react-notification-system-redux/blob/master/src/actions.js#L42
right ? but the toast can not hide.
I know that allowHtml
is supported by react-notification-system, but still receive plain text notification
According to #10 onRemove
should be called and when I check the code pulled from npm it is as described. Unfortunately the callback is never fired in case the notification is auto or manually dismissed.
Code to reproduce:
const id = "someID"
function onDismiss () {
store.dispatch(hide(id))
}
const notification = {
children : (<Notification id={ uid } onDismiss={ onDismiss } level={ "info" } message={ message } title={ title } />), /* custom body component */
dismissible : false,
level : "info",
uid,
autoDismiss : 5,
onRemove : () => console.log("callback") /* this is never fired */
}
store.dispatch(show(notification))
This only happens when notifications container is rendered with style={ false }
property.
This is related to #16. Creating new issue as the problem still exists.
When creating notification it is shown correctly. But when autoDismiss
option the hide action is not being dispatched and notification still resides in the state.
Also when triggering dismiss manually, the action is dispatched, but the notification is not being removed from the DOM.
Everything works fine when using just base react-notification-system
without redux wrapper, so I believe problem lies here.
Wanted to check out the live demo using the link provided in the readme but it doesn't seem to be working. No console errors but I didn't dig too much.
Installing locally and running worked fine. Looks good, exactly what I was looking for
-Alex
I used ur system and it's so great. I've read ur source code and i saw function hide
but i don't know how to hide all notification. Can you help me please? Thanks
Does your plug-in work with IE11
In this fragment you remove all notifications that are no longer in the state, which is totally fine.
// Get all active notifications from react-notification-system
/// and remove all where uid is not found in the reducer
(this.system().state.notifications || []).forEach(notification => {
if (notificationIds.indexOf(notification.uid) < 0) {
this.system().removeNotification(notification.uid);
}
});
But here you are looping for each notifications in the redux state even if some are already displayed. You should filter the redux notifications against notification that are already displayed and add only new ones.
notifications.forEach(notification => {
this.system().addNotification({
...notification,
onRemove: () => {
this.context.store.dispatch(actions.hide(notification.uid));
notification.onRemove && notification.onRemove();
}
});
});
Hi -
I have a situation where i call a Notifications.success() and the notifications state in redux (using autoDismiss) does not auto remove. This causes a double notification to show up when the next notification is triggered.
It doesnt happen every time but every so often i see this case. autoDismiss is set to 5 and the next event happens well after 5 seconds.
Any ideas ?
"react-notification-system#create-react-class#fbjs@^0.8.9" could be deduped from "0.8.16" to "react-notification-system#[email protected]"
Hi, I was wondering if you could do something like below. When I use the code now it only renders the first one but ignores the success notification. The idea is to inform the user that we are waiting for a response, and when it finishes update the notification to a success notification.
Or am I doing this wrong and is there another way to do this?
this.props.dispatch(Notifications.info({
uid: 'propertySettings',
title: 'Saving property settings'
}));
// if API returns with data
// Update the previous info notification to a success
this.props.dispatch(Notifications.success({
uid: 'propertySettings',
title: 'Property settings saved'
}));
Ofcourse I can use the Notifications.hide()
but still feel that this would be nice to have (eg. cleaner)
Hi.
I tried to update to [email protected] and I can not because there is a restriction
"react": "^16.4.0-0",
Why did you restrict?
TypeScript definition needs the following line to be added right after const warning: NotificationShow;
for removeAll()
to be usable:
function removeAll(): Action;
update to 0.3.x
Hi, first of all, thank you for great job!!!
After a while, when I get page taller than one screen, new notification make the browser to scroll me up to most top of the page, then it renders notification component (in correct place, of course)
May be you have some ideas, how to avoid it and render notification over invisible area, on top of this view port, instead of on top of page itself?
Much appreciated for any hints.
Is it possible to provide support to use multiple components with different styling ?
I think this can be done by changing the hardcoded ref in Notifications.js to a prop but i'm not sure
Hello, currently notifications will pile on top of one another... Is there a way to display a max of 1 notification at a time? In this particular use case, if one notification is still showing, it would be instantly removed and then the new notification would be shown.
I tried that by doing:
dispatch(removeAll());
dispatch(info({....
The problem with the above is the animations cause some crazy jumpiness and isn't very smooth. The removeAll seems to animate the removal which is the problem vs being instantly removed so the new notification can animated in nicely.
Thanks
It would be nice to have an .remove(level)
or .removeByLevel(level)
that removes all notifications from a specific level (warning
, success
, info
).
I think it would be very simple to implement 'cause is the same logic from .hide(uid)
, using a different filter condition in the reducer.
If this is a desired feature, I can implement it and open a PR.
when i use dispatch(Notifications.hide)
, it will cause RNS_HIDE_NOTIFICATION
twice.
anybody can tell me why?
Using this plugin while also using react@^16.0.0 causes the following error in the browser:
invariant.js:42 Uncaught Error: Element ref was specified as a string (notify) but no owner was set. You may have multiple copies of React loaded. (details: https://fb.me/react-refs-must-have-owner).
at invariant (invariant.js:42)
at coerceRef (react-dom.development.js:8579)
at reconcileSingleElement (react-dom.development.js:9379)
at reconcileChildFibers (react-dom.development.js:9477)
at reconcileChildrenAtPriority (react-dom.development.js:10127)
at reconcileChildren (react-dom.development.js:10118)
at finishClassComponent (react-dom.development.js:10254)
at updateClassComponent (react-dom.development.js:10226)
at beginWork (react-dom.development.js:10605)
at performUnitOfWork (react-dom.development.js:12573)
invariant @ invariant.js:42
coerceRef @ react-dom.development.js:8579
reconcileSingleElement @ react-dom.development.js:9379
reconcileChildFibers @ react-dom.development.js:9477
reconcileChildrenAtPriority @ react-dom.development.js:10127
reconcileChildren @ react-dom.development.js:10118
finishClassComponent @ react-dom.development.js:10254
updateClassComponent @ react-dom.development.js:10226
beginWork @ react-dom.development.js:10605
performUnitOfWork @ react-dom.development.js:12573
workLoop @ react-dom.development.js:12682
callCallback @ react-dom.development.js:1299
invokeGuardedCallbackDev @ react-dom.development.js:1338
invokeGuardedCallback @ react-dom.development.js:1195
performWork @ react-dom.development.js:12800
scheduleUpdateImpl @ react-dom.development.js:13185
scheduleUpdate @ react-dom.development.js:13124
enqueueSetState @ react-dom.development.js:9646
ReactComponent.setState @ react.development.js:218
(anonymous) @ Router.js:103
(anonymous) @ createTransitionManager.js:228
(anonymous) @ createTransitionManager.js:83
done @ AsyncUtils.js:74
(anonymous) @ AsyncUtils.js:80
(anonymous) @ authRoutes.js:17
Promise resolved (async)
getComponent @ authRoutes.js:15
getComponentsForRoute @ getComponents.js:12
(anonymous) @ getComponents.js:30
(anonymous) @ AsyncUtils.js:79
mapAsync @ AsyncUtils.js:78
getComponents @ getComponents.js:29
finishEnterHooks @ createTransitionManager.js:77
next @ AsyncUtils.js:47
loopAsync @ AsyncUtils.js:51
runTransitionHooks @ TransitionUtils.js:83
runEnterHooks @ TransitionUtils.js:107
(anonymous) @ createTransitionManager.js:70
runTransitionHooks @ TransitionUtils.js:74
runChangeHooks @ TransitionUtils.js:131
finishMatch @ createTransitionManager.js:67
(anonymous) @ createTransitionManager.js:45
done @ AsyncUtils.js:16
(anonymous) @ matchRoutes.js:234
(anonymous) @ matchRoutes.js:185
next @ AsyncUtils.js:41
loopAsync @ AsyncUtils.js:51
matchRoutes @ matchRoutes.js:231
onChildRoutes @ matchRoutes.js:179
(anonymous) @ matchRoutes.js:32
(anonymous) @ rootRoute.js:12
Promise resolved (async)
getChildRoutes @ rootRoute.js:11
getChildRoutes @ matchRoutes.js:25
matchRouteDeep @ matchRoutes.js:195
(anonymous) @ matchRoutes.js:232
next @ AsyncUtils.js:34
loopAsync @ AsyncUtils.js:51
matchRoutes @ matchRoutes.js:231
match @ createTransitionManager.js:41
historyListener @ createTransitionManager.js:222
listen @ createTransitionManager.js:246
Router_componentWillMount @ Router.js:96
callComponentWillMount @ react-dom.development.js:9777
mountClassInstance @ react-dom.development.js:9834
updateClassComponent @ react-dom.development.js:10216
beginWork @ react-dom.development.js:10605
performUnitOfWork @ react-dom.development.js:12573
workLoop @ react-dom.development.js:12682
callCallback @ react-dom.development.js:1299
invokeGuardedCallbackDev @ react-dom.development.js:1338
invokeGuardedCallback @ react-dom.development.js:1195
performWork @ react-dom.development.js:12800
scheduleUpdateImpl @ react-dom.development.js:13185
scheduleUpdate @ react-dom.development.js:13124
scheduleTopLevelUpdate @ react-dom.development.js:13395
updateContainer @ react-dom.development.js:13425
renderSubtreeIntoContainer @ react-dom.development.js:17108
render @ react-dom.development.js:17129
renderApp @ index.js:49
(anonymous) @ index.js:94
configureAPI @ api-setup.js:86
(anonymous) @ index.js:62
__webpack_require__ @ bootstrap 674ca770b414c16b5448:54
(anonymous) @ bundle.js:76060
__webpack_require__ @ bootstrap 674ca770b414c16b5448:54
webpackJsonpCallback @ bootstrap 674ca770b414c16b5448:25
(anonymous) @ bundle.js:1
react-dom.development.js:8305 The above error occurred in the <Notifications> component:
in Notifications (created by AppWrapper)
in div (created by AppWrapper)
in AppWrapper (created by Connect(AppWrapper))
in Connect(AppWrapper) (created by RouterContext)
in RouterContext (created by Router)
in Router
in Provider```
Hi!
react-redux
v7.0 released not too long ago and is it should be backward compatible with version v6.0, unless bad assumptions were made about some of the internals of react-redux.
See the note from the release note of 7.0:
Note: connect now uses React.memo() internally, which returns a special object rather than a function. Any code that assumed React components are only functions is wrong, and has been wrong since the release of React 16.6. If you were using PropTypes to check for valid component types, you should change from PropTypes.func to PropTypes.elementType instead.
I've been using react-notification-system-redux
with version 7 of react-redux
and haven't noticed any errors so far (though my usage is very light). Have you looked into upgrading the peer dependency and are you aware of any breaking changes?
I'd be happy to help submit a PR!
Document possible functions for using this plugin
`
Notifications.show(opts = {}, level = 'success')
Notifications.success(opts)
Notifications.error(opts)
Notifications.warning(opts)
Notifications.info(opts)
Notifications.hide(uid)
`
Had to dig into the source to understand how to send other types of notifications since .show is not in the example
I noticed Date.now() is being used inside the reducer to generate a fallback action uid.
This makes the reducer function impure by depending on external state, which should not be the case when working with redux. This will cause all sorts of trouble with redux-devtools or any kind of time travelling debugger.
I'd suggesting moving the Date.now() uid fallback logic to the action generators and depend exclusively on action data inside the reducer.
For anyone having trouble with this: a simple workaround is to always pass a uid parameter when showing a notification.
Upon updating to React 16, and running yarn check
I get the following errors:
error "react-notification-system-redux#react@^0.14 || ^15.0.0-rc || ^15.0" doesn't satisfy found match of "[email protected]"
error "react-notification-system-redux#react-dom@^0.14 || ^15.0.0-rc || ^15.0" doesn't satisfy found match of "[email protected]"
It would be nice if you can include react
and react-dom
16 in your package.json peerDependencies as well if possible.
Using these types: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/07352da21a909cb2786a40106aad1fea562d5973/types/react-notification-system-redux/index.d.ts
I see that the element Notifications is exported both as a class and as a namespace. I cannot figure out how to import the component, because the interpreter always tells me it's ambiguous:
import * as Notifications from 'react-notification-system-redux'
<Notifications notifications={notifications} />
<- tells me: [ts] JSX element type 'Notifications' does not have any construct or call signatures.
import Notifications from 'react-notification-system-redux'
<- tells me there is no default export
import {Notifications} from 'react-notification-system-redux'
<- has no exported member 'Notifications'.
yarn check v1.2.1
error "react-notification-system-redux#react@^0.14 || ^15.0.0-rc || ^15.0" doesn't satisfy found match of "[email protected]"
error "react-notification-system-redux#react-dom@^0.14 || ^15.0.0-rc || ^15.0" doesn't satisfy found match of "[email protected]"
Hi,
after React update we get a warning,
react-notification-system use "componentWillMount" method but it cause warning:
Warning: componentWillMount has been renamed, and is not recommended for use. See https://fb.me/react-async-component-lifecycle-hooks for details.
thanks
So. I create a notification using createNotification("error")
, it is displayed, then when the notification should be deleted I receive this
This is my configuration:
{
"dependencies": {
"@sentry/browser": "^4.5.3",
"babel-core": "^6.26.3",
"babel-eslint": "^10.0.1",
"babel-jest": "^23.6.0",
"babel-loader": "^8.0.4",
"babel-plugin-add-module-exports": "^1.0.0",
"babel-plugin-flow-react-proptypes": "^24.1.2",
"babel-plugin-react-html-attrs": "^2.1.0",
"babel-plugin-syntax-flow": "^6.18.0",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-decorators-legacy": "^1.3.5",
"babel-plugin-transform-flow-strip-types": "^6.22.0",
"babel-plugin-transform-react-constant-elements": "^6.23.0",
"babel-plugin-transform-react-inline-elements": "^6.22.0",
"babel-plugin-transform-react-remove-prop-types": "^0.4.20",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.7.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"big.js": "^5.2.2",
"bootstrap": "^4.1.3",
"classnames": "^2.2.6",
"copy": "^0.3.2",
"cross-env": "^5.2.0",
"css-loader": "^1.0.1",
"dezalgo": "^1.0.3",
"es3ify": "^0.2.2",
"eslint": "^5.9.0",
"eslint-plugin-flowtype": "^3.2.0",
"eslint-plugin-jsx-a11y": "^6.1.2",
"eslint-plugin-react": "^7.11.1",
"file-loader": "^2.0.0",
"flow-bin": "^0.86.0",
"flow-status-webpack-plugin": "^0.1.7",
"font-awesome": "^4.7.0",
"fs": "0.0.1-security",
"glob": "^7.1.3",
"history": "^4.7.2",
"humps": "^2.0.1",
"immutable": "^4.0.0-rc.12",
"jest": "^23.6.0",
"jest-immutable-matchers": "^2.0.1",
"json-loader": "^0.5.7",
"lodash.memoize": "^4.1.2",
"moment": "^2.22.2",
"node-sass": "^4.10.0",
"normalizr": "^3.3.0",
"npm": "^6.4.1",
"postcss-loader": "^3.0.0",
"query-string": "^6.2.0",
"react": "^16.6.3",
"react-addons-shallow-compare": "^15.6.2",
"react-autosuggest": "^9.4.2",
"react-dom": "^16.6.3",
"react-dropzone": "^7.0.1",
"react-hot-loader": "^4.3.12",
"react-loadable": "^5.5.0",
"react-notification-system-redux": "^1.2.0",
"react-raphael": "^0.9.0",
"react-redux": "^6.0.1",
"react-router": "^4.3.1",
"react-router-dom": "^4.3.1",
"react-router-redux": "^5.0.0-alpha.9",
"react-select": "^2.3.0",
"react-sidebar": "^3.0.2",
"reactstrap": "^6.5.0",
"redux": "^4.0.1",
"redux-form": "^8.1.0",
"redux-immutable": "^4.0.0",
"redux-injector": "^0.1.0",
"redux-promise-middleware": "^5.1.1",
"redux-saga": "^0.16.2",
"redux-thunk": "^2.3.0",
"redux-ui": "0.1.1",
"reselect": "^4.0.0",
"sass-loader": "^7.1.0",
"scss-compile": "^0.1.7",
"style-loader": "^0.23.1",
"superagent": "^4.0.0",
"superagent-promise": "^1.1.0",
"url-loader": "^1.1.2",
"webpack": "^4.26.0",
"webpack-cli": "^3.1.2",
"webpack-git-hash": "^1.0.2",
"webpack-preset": "^0.2.0",
"webpack-preset-babel": "^0.2.0",
"webpack-preset-babel-stage-2": "^0.2.0"
}
}
Thanks for this wrapper, it's very useful. Is it possible for you to update the Readme file with examples with use of props like style and others?
I tryed something like
<Notifications notifications={ this.props.notifications} style={false} noAnimation={true}/>
but it's not working.
Currently, your installation instructions says to install both react-notification-system
and react-notification-system-redux
. However, you included react-notification-system
as a dependency in your package.json as well. Is there a reason for that?
shouldn't it be moved to peerDependencies
section instead?
HI @gor181
import {reducer as notifications} from 'react-notification-system-redux'
const App = combineReducers({
notifications,
})
export default App
notification is undefined and unavailable in state.
simple and quite straightfoward issue but I can't find the error.
Thanks.
Hooks seem like a natural progression for this library. React for example has useReducer
built in since 16.8.
https://reactjs.org/docs/hooks-reference.html#usereducer
In other words... it seems that it's possible to create a new major release that doesn't require redux, but requires at least React 16.8.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.