8 Commits

13686 changed files with 341916 additions and 480419 deletions

2
.gitignore vendored
View File

@@ -18,6 +18,8 @@ boltbrowser.win64.exe
logs/server.log logs/server.log
.goreleaser.yml .goreleaser.yml
config.toml.backup config.toml.backup
config.1.toml
config.toml.old
/public/static/js/kickwebsocket.js.backup /public/static/js/kickwebsocket.js.backup
/public/static/js/kickwebsocket-generated.js /public/static/js/kickwebsocket-generated.js
clientAuth.txt clientAuth.txt

118
README.md
View File

@@ -45,6 +45,8 @@ Image of the frontend UI
- [X] Mostly generated client config from toml.config on first run - [X] Mostly generated client config from toml.config on first run
- [X] Ability to view TOML settings from WebUI (and perhaps change a few as well)
- [ ] Unit testing completed for a large portion of the package - [ ] Unit testing completed for a large portion of the package
- [ ] Stability/bug fixing/Optimization rewrite of some of the core structures of the WebUI and base server - [ ] Stability/bug fixing/Optimization rewrite of some of the core structures of the WebUI and base server
@@ -53,7 +55,7 @@ Image of the frontend UI
- [ ] Ability to set priority for individual files (just added to anacrolix/torrent so coming soon, already added to my UI) - [ ] Ability to set priority for individual files (just added to anacrolix/torrent so coming soon, already added to my UI)
- [ ] Ability to view TOML settings from WebUI (and perhaps change a few as well)
- Late 2018 - Late 2018
@@ -62,119 +64,9 @@ Image of the frontend UI
- [ ] React-native Android app (I don't own any Mac products so there will be no iPhone version) - [ ] React-native Android app (I don't own any Mac products so there will be no iPhone version)
# Installation: # Documentation
## Linux (tested on Debian) All the documentation is available [here](https://deranjer.github.io/)
You can watch a YouTube video of me setting it up:
<a href="http://www.youtube.com/watch?feature=player_embedded&v=G0gO_cm_Oks
" target="_blank"><img src="http://img.youtube.com/vi/G0gO_cm_Oks/0.jpg"
alt="goTorrent Alpha Setup Video" width="240" height="180" border="10" /></a>
### Configuring the backend
Download the latest release from the releases tab, it will be in a tar.gz format.
Create a directory where goTorrent will run from
sudo mkdir /opt/goTorrent
Put the tar.gz release into the folder, and extract it.
tar -zxvf goTorrent_release_64-git.tar.gz
You can then remove the tar.gz if you wish. You should have something similar to the following files:
drwxr-xr-x 5 root root 9 Jan 21 14:56 .
drwxr-xr-x 5 root root 5 Jan 21 14:54 ..
-rw-rw-rw- 1 root root 1086 Dec 1 01:42 LICENSE
-rw-rw-rw- 1 root root 69 Dec 1 01:01 README.md
-rw-rw-rw- 1 root root 4466 Jan 21 03:48 config.toml
drwxr-xr-x 3 root root 3 Jan 21 14:55 dist-specific-files
-rw-rw-rw- 1 root root 12503552 Jan 21 03:53 goTorrent
drwxr-xr-x 3 root root 3 Jan 21 14:55 public
drwxr-xr-x 2 root root 3 Jan 21 14:55 templates
The `config.toml` file contains all of the settings for the server part of the application. Most of the important settings are at the top of the file, so open it with your prefered text editor.
[serverConfig]
ServerPort = ":8000" #leave format as is it expects a string with colon
ServerAddr = "" #blank will bind to default IP address, usually fine to leave be
LogLevel = "Warn" # Options = Debug, Info, Warn, Error, Fatal, Panic
LogOutput = "file" #Options = file, stdout #file will print it to logs/server.log
SeedRatioStop = 1.50 #automatically stops the torrent after it reaches this seeding ratio
#Relative or absolute path accepted, the server will convert any relative path to an absolute path.
DefaultMoveFolder = 'downloaded' #default path that a finished torrent is symlinked to after completion. Torrents added via RSS will default here
TorrentWatchFolder = 'torrentUpload' #folder path that is watched for .torrent files and adds them automatically every 5 minutes
#Limits your upload and download speed globally, all are averages and not burst protected (usually burst on start).
#Low = ~.05MB/s, Medium = ~.5MB/s, High = ~1.5MB/s
UploadRateLimit = "Unlimited" #Options are "Low", "Medium", "High", "Unlimited" #Unlimited is default
DownloadRateLimit = "Unlimited"
[notifications]
PushBulletToken = "" #add your pushbullet api token here to notify of torrent completion to pushbullet
Usually you don't need to change anything in this file, goTorrent will use your default IP address and bind to it. You can change the port if you wish.
Next, we need to make sure that the executable runs, so run the following:
chmod +x goTorrent
This will make the program executable.
###Connecting the Frontend to the Backend
We need to connect our react frontend to our Golang backend, for this we only need to edit one JS file.
nano public/static/js/kickwebsocket.js
var ws = new WebSocket("ws://192.168.1.141:8000/websocket"); //creating websocket
Just change the IP address after ws:// to your server IP address, and change the port if you changed the port in the `config.toml` file.
Then save that file and return to `/opt/goTorrent`.
Now we can test the server. For testing I recommend going into the `config.toml` file and changing the `LogOutput` to `stdout`, and the `LogLevel` to `Info`.
Then start the server:
./goTorrent
If you have `LogLevel` set to `Info`, you should see the confirmation that the client config has been generated.
You can then open your browser and connect to IP:Port (http) and you should see the main page. You will see an error for retrieving RSS feeds in stdout, but this is expected for first load.
You can press `F12` if using Chrome to open the console and click around the UI to see the logging available for the frontend.
### Running goTorrent as a Service
If you are on a linux system that uses systemd, in the `dist-specific-files\Linux-systemd\` folder there is a `goTorrent.service` file that can be used to setup systemd for goTorrent. A quick overview of what is needed.
1. Edit the systemd file to specify your specific implementation
2. Copy the file to your systemd folder, i.e. `/etc/systemd/system`
3. Enable the service `systemctl enable goTorrent.service`
4. If using a new user, create that user and assign permissions:
a. `useradd goTorrent`
b. `sudo chown -R goTorrent:goTorrent /opt/goTorrent`
c. If you want to test server: `su goTorrent` then run the executable
5. Set your `config.toml` file to the values you want.
6. Start your server: `systemctl start goTorrent`
7. Check for errors: `systemctl status goTorrent`. You can also check `logs\server.log`.
### Windows
Please see the linux instructions as they are similar, for running it as a service I havn't tried out any of the programs that claim to do that, but perhaps try [NSSM](http://nssm.cc/download)
# Special Thanks # Special Thanks

View File

@@ -1,14 +1,14 @@
[serverConfig] [serverConfig]
ServerPort = ":8000" #leave format as is it expects a string with colon ServerPort = ":8000" #leave format as is it expects a string with colon
ServerAddr = "" #blank will bind to default IP address, usually fine to leave be ServerAddr = "192.168.1.100" #Put in the IP address you want to bind to
LogLevel = "Info" # Options = Debug, Info, Warn, Error, Fatal, Panic LogLevel = "Info" # Options = Debug, Info, Warn, Error, Fatal, Panic
LogOutput = "stdout" #Options = file, stdout #file will print it to logs/server.log LogOutput = "stdout" #Options = file, stdout #file will print it to logs/server.log
SeedRatioStop = 1.50 #automatically stops the torrent after it reaches this seeding ratio SeedRatioStop = 1.50 #automatically stops the torrent after it reaches this seeding ratio
#Relative or absolute path accepted, the server will convert any relative path to an absolute path. #Relative or absolute path accepted, the server will convert any relative path to an absolute path.
DefaultMoveFolder = 'Z:\downloads' #default path that a finished torrent is symlinked to after completion. Torrents added via RSS will default here DefaultMoveFolder = 'downloads' #default path that a finished torrent is symlinked to after completion. Torrents added via RSS will default here
TorrentWatchFolder = 'torrentUpload' #folder path that is watched for .torrent files and adds them automatically every 5 minutes TorrentWatchFolder = 'torrentUpload' #folder path that is watched for .torrent files and adds them automatically every 5 minutes
#Limits your upload and download speed globally, all are averages and not burst protected (usually burst on start). #Limits your upload and download speed globally, all are averages and not burst protected (usually burst on start).
@@ -25,13 +25,13 @@
[notifications] [notifications]
PushBulletToken = "o.8sUHemPkTCaty3u7KnyvEBN19EkeT63g" #add your pushbullet api token here to notify of torrent completion to pushbullet PushBulletToken = "" #add your pushbullet api token here to notify of torrent completion to pushbullet
[reverseProxy] [reverseProxy]
#This is for setting up goTorrent behind a reverse Proxy (with SSL, reverse proxy with no SSL will require editing the WSS connection to a WS connection manually) #This is for setting up goTorrent behind a reverse Proxy (with SSL, reverse proxy with no SSL will require editing the WSS connection to a WS connection manually)
ProxyEnabled = true #bool, either false or true ProxyEnabled = false #bool, either false or true
#URL is CASE SENSITIVE #URL is CASE SENSITIVE
BaseURL = "derajnet.duckdns.org/gopher/" # MUST be in the format (if you have a subdomain, and must have trailing slash) "yoursubdomain.domain.org/subroute/" BaseURL = "domain.com/subroute/" # MUST be in the format (if you have a subdomain, and must have trailing slash) "yoursubdomain.domain.org/subroute/"
[EncryptionPolicy] [EncryptionPolicy]

View File

@@ -5,6 +5,8 @@ import (
"github.com/anacrolix/torrent" "github.com/anacrolix/torrent"
"github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/metainfo"
Settings "github.com/deranjer/goTorrent/settings"
Storage "github.com/deranjer/goTorrent/storage"
) )
//All the message types are first, first the server handling messages from the client //All the message types are first, first the server handling messages from the client
@@ -17,6 +19,12 @@ type Message struct {
//Next are the messages the server sends to the client //Next are the messages the server sends to the client
//AuthResponse is sent when the client fails to perform authentication correctly
type AuthResponse struct {
MessageType string
Payload string
}
//ServerPushMessage is information (usually logs and status messages) that the server pushes to the client //ServerPushMessage is information (usually logs and status messages) that the server pushes to the client
type ServerPushMessage struct { type ServerPushMessage struct {
MessageType string MessageType string
@@ -37,6 +45,15 @@ type RSSFeedsNames struct {
RSSFeedURL string RSSFeedURL string
} }
//SingleRSSFeedMessage contains the torrents/name/etc of a single torrent feed
type SingleRSSFeedMessage struct { //TODO had issues with getting this to work with Storage or Engine
MessageType string
URL string //the URL of the individual RSS feed
Name string
TotalTorrents int
Torrents []Storage.SingleRSSTorrent //name of the torrents
}
//TorrentList struct contains the torrent list that is sent to the client //TorrentList struct contains the torrent list that is sent to the client
type TorrentList struct { //helps create the JSON structure that react expects to receive type TorrentList struct { //helps create the JSON structure that react expects to receive
MessageType string `json:"MessageType"` MessageType string `json:"MessageType"`
@@ -68,6 +85,11 @@ type TorrentFile struct {
FilePriority string //Currently "High", "Normal", or "Cancel" FilePriority string //Currently "High", "Normal", or "Cancel"
} }
type SettingsFile struct {
MessageType string
Config Settings.FullClientSettings
}
//ClientDB struct contains the struct that is used to compose the torrentlist //ClientDB struct contains the struct that is used to compose the torrentlist
type ClientDB struct { //TODO maybe separate out the internal bits into another client struct type ClientDB struct { //TODO maybe separate out the internal bits into another client struct
TorrentHashString string //Passed to client for displaying hash and is used to uniquely identify all torrents TorrentHashString string //Passed to client for displaying hash and is used to uniquely identify all torrents

View File

@@ -7,6 +7,7 @@ import (
"github.com/anacrolix/torrent" "github.com/anacrolix/torrent"
"github.com/asdine/storm" "github.com/asdine/storm"
Settings "github.com/deranjer/goTorrent/settings"
Storage "github.com/deranjer/goTorrent/storage" Storage "github.com/deranjer/goTorrent/storage"
"github.com/mmcdole/gofeed" "github.com/mmcdole/gofeed"
"github.com/robfig/cron" "github.com/robfig/cron"
@@ -21,7 +22,7 @@ func InitializeCronEngine() *cron.Cron {
} }
//CheckTorrentWatchFolder adds torrents from a watch folder //TODO see if you can use filepath.Abs instead of changing directory //CheckTorrentWatchFolder adds torrents from a watch folder //TODO see if you can use filepath.Abs instead of changing directory
func CheckTorrentWatchFolder(c *cron.Cron, db *storm.DB, tclient *torrent.Client, torrentLocalStorage Storage.TorrentLocal, config FullClientSettings) { func CheckTorrentWatchFolder(c *cron.Cron, db *storm.DB, tclient *torrent.Client, torrentLocalStorage Storage.TorrentLocal, config Settings.FullClientSettings) {
c.AddFunc("@every 5m", func() { c.AddFunc("@every 5m", func() {
Logger.WithFields(logrus.Fields{"Watch Folder": config.TorrentWatchFolder}).Info("Running the watch folder cron job") Logger.WithFields(logrus.Fields{"Watch Folder": config.TorrentWatchFolder}).Info("Running the watch folder cron job")
torrentFiles, err := ioutil.ReadDir(config.TorrentWatchFolder) torrentFiles, err := ioutil.ReadDir(config.TorrentWatchFolder)
@@ -57,7 +58,7 @@ func CheckTorrentWatchFolder(c *cron.Cron, db *storm.DB, tclient *torrent.Client
} }
//RefreshRSSCron refreshes all of the RSS feeds on an hourly basis //RefreshRSSCron refreshes all of the RSS feeds on an hourly basis
func RefreshRSSCron(c *cron.Cron, db *storm.DB, tclient *torrent.Client, torrentLocalStorage Storage.TorrentLocal, config FullClientSettings) { func RefreshRSSCron(c *cron.Cron, db *storm.DB, tclient *torrent.Client, torrentLocalStorage Storage.TorrentLocal, config Settings.FullClientSettings) {
c.AddFunc("@hourly", func() { c.AddFunc("@hourly", func() {
torrentHashHistory := Storage.FetchHashHistory(db) torrentHashHistory := Storage.FetchHashHistory(db)
RSSFeedStore := Storage.FetchRSSFeeds(db) RSSFeedStore := Storage.FetchRSSFeeds(db)

View File

@@ -6,6 +6,7 @@ import (
"runtime" "runtime"
"github.com/asdine/storm" "github.com/asdine/storm"
Settings "github.com/deranjer/goTorrent/settings"
Storage "github.com/deranjer/goTorrent/storage" Storage "github.com/deranjer/goTorrent/storage"
pushbullet "github.com/mitsuse/pushbullet-go" pushbullet "github.com/mitsuse/pushbullet-go"
"github.com/mitsuse/pushbullet-go/requests" "github.com/mitsuse/pushbullet-go/requests"
@@ -14,7 +15,7 @@ import (
) )
//MoveAndLeaveSymlink takes the file from the default download dir and moves it to the user specified directory and then leaves a symlink behind. //MoveAndLeaveSymlink takes the file from the default download dir and moves it to the user specified directory and then leaves a symlink behind.
func MoveAndLeaveSymlink(config FullClientSettings, tHash string, db *storm.DB, moveDone bool, oldPath string) { //moveDone and oldPath are for moving a completed torrent func MoveAndLeaveSymlink(config Settings.FullClientSettings, tHash string, db *storm.DB, moveDone bool, oldPath string) { //moveDone and oldPath are for moving a completed torrent
tStorage := Storage.FetchTorrentFromStorage(db, tHash) tStorage := Storage.FetchTorrentFromStorage(db, tHash)
Logger.WithFields(logrus.Fields{"Torrent Name": tStorage.TorrentName}).Info("Move and Create symlink started for torrent") Logger.WithFields(logrus.Fields{"Torrent Name": tStorage.TorrentName}).Info("Move and Create symlink started for torrent")
var oldFilePath string var oldFilePath string
@@ -77,7 +78,7 @@ func MoveAndLeaveSymlink(config FullClientSettings, tHash string, db *storm.DB,
} }
func notifyUser(tStorage Storage.TorrentLocal, config FullClientSettings, db *storm.DB) { func notifyUser(tStorage Storage.TorrentLocal, config Settings.FullClientSettings, db *storm.DB) {
Logger.WithFields(logrus.Fields{"New File Path": tStorage.StoragePath, "Torrent Name": tStorage.TorrentName}).Info("Attempting to notify user..") Logger.WithFields(logrus.Fields{"New File Path": tStorage.StoragePath, "Torrent Name": tStorage.TorrentName}).Info("Attempting to notify user..")
tStorage.TorrentMoved = true tStorage.TorrentMoved = true
//Storage.AddTorrentLocalStorage(db, tStorage) //Updating the fact that we moved the torrent //Storage.AddTorrentLocalStorage(db, tStorage) //Updating the fact that we moved the torrent

View File

@@ -4,12 +4,13 @@ import (
"testing" "testing"
"github.com/asdine/storm" "github.com/asdine/storm"
Settings "github.com/deranjer/goTorrent/settings"
Storage "github.com/deranjer/goTorrent/storage" Storage "github.com/deranjer/goTorrent/storage"
) )
func TestMoveAndLeaveSymlink(t *testing.T) { func TestMoveAndLeaveSymlink(t *testing.T) {
type args struct { type args struct {
config FullClientSettings config Settings.FullClientSettings
tStorage Storage.TorrentLocal tStorage Storage.TorrentLocal
db *storm.DB db *storm.DB
} }
@@ -29,7 +30,7 @@ func TestMoveAndLeaveSymlink(t *testing.T) {
func Test_notifyUser(t *testing.T) { func Test_notifyUser(t *testing.T) {
type args struct { type args struct {
tStorage Storage.TorrentLocal tStorage Storage.TorrentLocal
config FullClientSettings config Settings.FullClientSettings
db *storm.DB db *storm.DB
} }
tests := []struct { tests := []struct {

View File

@@ -11,6 +11,7 @@ import (
"github.com/anacrolix/torrent" "github.com/anacrolix/torrent"
"github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/metainfo"
"github.com/asdine/storm" "github.com/asdine/storm"
Settings "github.com/deranjer/goTorrent/settings"
Storage "github.com/deranjer/goTorrent/storage" Storage "github.com/deranjer/goTorrent/storage"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/mmcdole/gofeed" "github.com/mmcdole/gofeed"
@@ -20,6 +21,9 @@ import (
//Logger is the injected variable for global logger //Logger is the injected variable for global logger
var Logger *logrus.Logger var Logger *logrus.Logger
//Config is the injected variable for the torrent config
var Config Settings.FullClientSettings
//Conn is the injected variable for the websocket connection //Conn is the injected variable for the websocket connection
var Conn *websocket.Conn var Conn *websocket.Conn
@@ -84,7 +88,6 @@ func timeOutInfo(clientTorrent *torrent.Torrent, seconds time.Duration) (deleted
select { select {
case <-clientTorrent.GotInfo(): //attempting to retrieve info for torrent case <-clientTorrent.GotInfo(): //attempting to retrieve info for torrent
Logger.WithFields(logrus.Fields{"clientTorrentName": clientTorrent.Name()}).Debug("Received torrent info for torrent") Logger.WithFields(logrus.Fields{"clientTorrentName": clientTorrent.Name()}).Debug("Received torrent info for torrent")
clientTorrent.DownloadAll()
return false return false
case <-timeout: // getting info for torrent has timed out so purging the torrent case <-timeout: // getting info for torrent has timed out so purging the torrent
Logger.WithFields(logrus.Fields{"clientTorrentName": clientTorrent.Name()}).Error("Forced to drop torrent from timeout waiting for info") Logger.WithFields(logrus.Fields{"clientTorrentName": clientTorrent.Name()}).Error("Forced to drop torrent from timeout waiting for info")
@@ -127,7 +130,7 @@ func readTorrentFileFromDB(element *Storage.TorrentLocal, tclient *torrent.Clien
} }
//StartTorrent creates the storage.db entry and starts A NEW TORRENT and adds to the running torrent array //StartTorrent creates the storage.db entry and starts A NEW TORRENT and adds to the running torrent array
func StartTorrent(clientTorrent *torrent.Torrent, torrentLocalStorage Storage.TorrentLocal, torrentDbStorage *storm.DB, torrentType, torrentFilePathAbs, torrentStoragePath, labelValue string, config FullClientSettings) { func StartTorrent(clientTorrent *torrent.Torrent, torrentLocalStorage Storage.TorrentLocal, torrentDbStorage *storm.DB, torrentType, torrentFilePathAbs, torrentStoragePath, labelValue string, config Settings.FullClientSettings) {
timedOut := timeOutInfo(clientTorrent, 45) //seeing if adding the torrent times out (giving 45 seconds) timedOut := timeOutInfo(clientTorrent, 45) //seeing if adding the torrent times out (giving 45 seconds)
if timedOut { //if we fail to add the torrent return if timedOut { //if we fail to add the torrent return
return return
@@ -172,34 +175,37 @@ func StartTorrent(clientTorrent *torrent.Torrent, torrentLocalStorage Storage.To
TorrentFilePriorityArray = append(TorrentFilePriorityArray, torrentFilePriority) TorrentFilePriorityArray = append(TorrentFilePriorityArray, torrentFilePriority)
} }
torrentLocalStorage.TorrentFilePriority = TorrentFilePriorityArray torrentLocalStorage.TorrentFilePriority = TorrentFilePriorityArray
Storage.AddTorrentLocalStorage(torrentDbStorage, torrentLocalStorage) //writing all of the data to the database Storage.AddTorrentLocalStorage(torrentDbStorage, torrentLocalStorage) //writing all of the data to the database
clientTorrent.DownloadAll() //starting the download clientTorrent.DownloadAll() //set all pieces to download
NumPieces := clientTorrent.NumPieces() //find the number of pieces
clientTorrent.CancelPieces(1, NumPieces) //cancel all of the pieces to use file priority
for _, singleFile := range clientTorrent.Files() { //setting all of the file priorities to normal
singleFile.SetPriority(torrent.PiecePriorityNormal)
}
fmt.Println("Downloading ALL") //starting the download
CreateServerPushMessage(ServerPushMessage{MessageType: "serverPushMessage", MessageLevel: "success", Payload: "Torrent added!"}, Conn) CreateServerPushMessage(ServerPushMessage{MessageType: "serverPushMessage", MessageLevel: "success", Payload: "Torrent added!"}, Conn)
} }
//CreateRunningTorrentArray creates the entire torrent list to pass to client //CreateInitialTorrentArray adds all the torrents on program start from the database
func CreateRunningTorrentArray(tclient *torrent.Client, TorrentLocalArray []*Storage.TorrentLocal, PreviousTorrentArray []ClientDB, config FullClientSettings, db *storm.DB) (RunningTorrentArray []ClientDB) { func CreateInitialTorrentArray(tclient *torrent.Client, TorrentLocalArray []*Storage.TorrentLocal, db *storm.DB) {
for _, singleTorrentFromStorage := range TorrentLocalArray { for _, singleTorrentFromStorage := range TorrentLocalArray {
var singleTorrent *torrent.Torrent var singleTorrent *torrent.Torrent
var TempHash metainfo.Hash
tickUpdateStruct := Storage.TorrentLocal{} //we are shoving the tick updates into a torrentlocal struct to pass to storage happens at the end of the routine
fullClientDB := new(ClientDB)
//singleTorrentStorageInfo := Storage.FetchTorrentFromStorage(db, TempHash.String()) //pulling the single torrent info from storage ()
if singleTorrentFromStorage.TorrentType == "file" { //if it is a file pull it from the uploaded torrent folder
var err error var err error
if singleTorrentFromStorage.TorrentType == "file" { //if it is a file pull it from the uploaded torrent folder
singleTorrent, err = readTorrentFileFromDB(singleTorrentFromStorage, tclient, db) singleTorrent, err = readTorrentFileFromDB(singleTorrentFromStorage, tclient, db)
if err != nil { if err != nil {
continue continue
} }
fullClientDB.SourceType = "Torrent File"
} else { } else {
singleTorrentFromStorageMagnet := "magnet:?xt=urn:btih:" + singleTorrentFromStorage.Hash //For magnet links just need to prepend the magnet part to the hash to readd singleTorrentFromStorageMagnet := "magnet:?xt=urn:btih:" + singleTorrentFromStorage.Hash //For magnet links just need to prepend the magnet part to the hash to readd
singleTorrent, _ = tclient.AddMagnet(singleTorrentFromStorageMagnet) singleTorrent, err = tclient.AddMagnet(singleTorrentFromStorageMagnet)
fullClientDB.SourceType = "Magnet Link" if err != nil {
continue
}
} }
if len(singleTorrentFromStorage.InfoBytes) == 0 { //TODO.. kind of a fringe scenario.. not sure if needed since the db should always have the infobytes if len(singleTorrentFromStorage.InfoBytes) == 0 { //TODO.. kind of a fringe scenario.. not sure if needed since the db should always have the infobytes
timeOut := timeOutInfo(singleTorrent, 45) timeOut := timeOutInfo(singleTorrent, 45)
@@ -210,16 +216,66 @@ func CreateRunningTorrentArray(tclient *torrent.Client, TorrentLocalArray []*Sto
singleTorrentFromStorage.InfoBytes = singleTorrent.Metainfo().InfoBytes singleTorrentFromStorage.InfoBytes = singleTorrent.Metainfo().InfoBytes
} }
err := singleTorrent.SetInfoBytes(singleTorrentFromStorage.InfoBytes) //setting the infobytes back into the torrent err = singleTorrent.SetInfoBytes(singleTorrentFromStorage.InfoBytes) //setting the infobytes back into the torrent
if err != nil { if err != nil {
Logger.WithFields(logrus.Fields{"torrentFile": singleTorrent.Name(), "error": err}).Error("Unable to add infobytes to the torrent!") Logger.WithFields(logrus.Fields{"torrentFile": singleTorrent.Name(), "error": err}).Error("Unable to add infobytes to the torrent!")
} }
if singleTorrentFromStorage.TorrentStatus != "Completed" && singleTorrentFromStorage.TorrentStatus != "Stopped" {
fmt.Println("Starting torrent as download", singleTorrent.Name())
singleTorrent.DownloadAll() //set all of the pieces to download (piece prio is NE to file prio)
NumPieces := singleTorrent.NumPieces() //find the number of pieces
singleTorrent.CancelPieces(1, NumPieces) //cancel all of the pieces to use file priority
for _, singleFile := range singleTorrent.Files() { //setting all of the file priorities to normal
singleFile.SetPriority(torrent.PiecePriorityNormal)
}
} else {
fmt.Println("Torrent status is....", singleTorrentFromStorage.TorrentStatus)
}
}
SetFilePriority(tclient, db) //Setting the desired file priority from storage
}
//CreateRunningTorrentArray creates the entire torrent list to pass to client
func CreateRunningTorrentArray(tclient *torrent.Client, TorrentLocalArray []*Storage.TorrentLocal, PreviousTorrentArray []ClientDB, config Settings.FullClientSettings, db *storm.DB) (RunningTorrentArray []ClientDB) {
for _, singleTorrentFromStorage := range TorrentLocalArray {
var singleTorrent *torrent.Torrent
var TempHash metainfo.Hash
for _, liveTorrent := range tclient.Torrents() { //matching the torrent from storage to the live torrent
if singleTorrentFromStorage.Hash == liveTorrent.InfoHash().String() {
singleTorrent = liveTorrent
}
}
tickUpdateStruct := Storage.TorrentLocal{} //we are shoving the tick updates into a torrentlocal struct to pass to storage happens at the end of the routine
fullClientDB := new(ClientDB)
//singleTorrentStorageInfo := Storage.FetchTorrentFromStorage(db, TempHash.String()) //pulling the single torrent info from storage ()
if singleTorrentFromStorage.TorrentStatus == "Dropped" {
Logger.WithFields(logrus.Fields{"selection": singleTorrentFromStorage.TorrentName}).Info("Deleting just the torrent")
singleTorrent.Drop()
Storage.DelTorrentLocalStorage(db, singleTorrentFromStorage.Hash)
}
if singleTorrentFromStorage.TorrentStatus == "DroppedData" {
Logger.WithFields(logrus.Fields{"selection": singleTorrentFromStorage.TorrentName}).Info("Deleting just the torrent")
singleTorrent.Drop()
Storage.DelTorrentLocalStorageAndFiles(db, singleTorrentFromStorage.Hash, Config.TorrentConfig.DataDir)
}
if singleTorrentFromStorage.TorrentType == "file" { //if it is a file pull it from the uploaded torrent folder
fullClientDB.SourceType = "Torrent File"
} else {
fullClientDB.SourceType = "Magnet Link"
}
calculatedTotalSize := CalculateDownloadSize(singleTorrentFromStorage, singleTorrent) calculatedTotalSize := CalculateDownloadSize(singleTorrentFromStorage, singleTorrent)
calculatedCompletedSize := CalculateCompletedSize(singleTorrentFromStorage, singleTorrent) calculatedCompletedSize := CalculateCompletedSize(singleTorrentFromStorage, singleTorrent)
TempHash = singleTorrent.InfoHash() TempHash = singleTorrent.InfoHash()
if (calculatedCompletedSize == singleTorrentFromStorage.TorrentSize) && (singleTorrentFromStorage.TorrentMoved == false) { //if we are done downloading and haven't moved torrent yet if (calculatedCompletedSize == singleTorrentFromStorage.TorrentSize) && (singleTorrentFromStorage.TorrentMoved == false) { //if we are done downloading and haven't moved torrent yet
Logger.WithFields(logrus.Fields{"singleTorrent": singleTorrentFromStorage.TorrentName}).Info("Torrent Completed, moving...") Logger.WithFields(logrus.Fields{"singleTorrent": singleTorrentFromStorage.TorrentName}).Info("Torrent Completed, moving...")
MoveAndLeaveSymlink(config, singleTorrent.InfoHash().String(), db, false, "") //can take some time to move file so running this in another thread TODO make this a goroutine and skip this block if the routine is still running go MoveAndLeaveSymlink(config, singleTorrent.InfoHash().String(), db, false, "") //can take some time to move file so running this in another thread TODO make this a goroutine and skip this block if the routine is still running
} }
fullStruct := singleTorrent.Stats() fullStruct := singleTorrent.Stats()
@@ -250,7 +306,7 @@ func CreateRunningTorrentArray(tclient *torrent.Client, TorrentLocalArray []*Sto
for _, previousElement := range PreviousTorrentArray { for _, previousElement := range PreviousTorrentArray {
TempHash := singleTorrent.InfoHash() TempHash := singleTorrent.InfoHash()
if previousElement.TorrentHashString == TempHash.String() { //matching previous to new if previousElement.TorrentHashString == TempHash.String() { //matching previous to new
CalculateTorrentSpeed(singleTorrent, fullClientDB, previousElement) CalculateTorrentSpeed(singleTorrent, fullClientDB, previousElement, calculatedCompletedSize)
fullClientDB.TotalUploadedBytes = singleTorrentFromStorage.UploadedBytes + (fullStruct.ConnStats.BytesWrittenData - previousElement.DataBytesWritten) fullClientDB.TotalUploadedBytes = singleTorrentFromStorage.UploadedBytes + (fullStruct.ConnStats.BytesWrittenData - previousElement.DataBytesWritten)
} }
} }
@@ -263,6 +319,7 @@ func CreateRunningTorrentArray(tclient *torrent.Client, TorrentLocalArray []*Sto
CalculateTorrentStatus(singleTorrent, fullClientDB, config, singleTorrentFromStorage, calculatedCompletedSize, calculatedTotalSize) CalculateTorrentStatus(singleTorrent, fullClientDB, config, singleTorrentFromStorage, calculatedCompletedSize, calculatedTotalSize)
tickUpdateStruct.UploadRatio = fullClientDB.UploadRatio tickUpdateStruct.UploadRatio = fullClientDB.UploadRatio
tickUpdateStruct.TorrentSize = calculatedTotalSize
tickUpdateStruct.UploadedBytes = fullClientDB.TotalUploadedBytes tickUpdateStruct.UploadedBytes = fullClientDB.TotalUploadedBytes
tickUpdateStruct.TorrentStatus = fullClientDB.Status tickUpdateStruct.TorrentStatus = fullClientDB.Status
tickUpdateStruct.Hash = fullClientDB.TorrentHashString //needed for index tickUpdateStruct.Hash = fullClientDB.TorrentHashString //needed for index
@@ -274,7 +331,7 @@ func CreateRunningTorrentArray(tclient *torrent.Client, TorrentLocalArray []*Sto
} }
//CreateFileListArray creates a file list for a single torrent that is selected and sent to the server //CreateFileListArray creates a file list for a single torrent that is selected and sent to the server
func CreateFileListArray(tclient *torrent.Client, selectedHash string, db *storm.DB, config FullClientSettings) TorrentFileList { func CreateFileListArray(tclient *torrent.Client, selectedHash string, db *storm.DB, config Settings.FullClientSettings) TorrentFileList {
runningTorrents := tclient.Torrents() //don't need running torrent array since we aren't adding or deleting from storage runningTorrents := tclient.Torrents() //don't need running torrent array since we aren't adding or deleting from storage
torrentFileListStorage := Storage.FetchTorrentFromStorage(db, selectedHash) torrentFileListStorage := Storage.FetchTorrentFromStorage(db, selectedHash)
TorrentFileListSelected := TorrentFileList{} TorrentFileListSelected := TorrentFileList{}

View File

@@ -7,6 +7,8 @@ import (
"time" "time"
"github.com/anacrolix/torrent" "github.com/anacrolix/torrent"
"github.com/asdine/storm"
Settings "github.com/deranjer/goTorrent/settings"
"github.com/deranjer/goTorrent/storage" "github.com/deranjer/goTorrent/storage"
Storage "github.com/deranjer/goTorrent/storage" Storage "github.com/deranjer/goTorrent/storage"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
@@ -21,6 +23,15 @@ func secondsToMinutes(inSeconds int64) string {
return str return str
} }
//MakeRange creates a range of pieces to set their priority based on a file
func MakeRange(min, max int) []int {
a := make([]int, max-min+1)
for i := range a {
a[i] = min + i
}
return a
}
//HumanizeBytes returns a nice humanized version of bytes in either GB or MB //HumanizeBytes returns a nice humanized version of bytes in either GB or MB
func HumanizeBytes(bytes float32) string { func HumanizeBytes(bytes float32) string {
if bytes < 1000000 { //if we have less than 1MB in bytes convert to KB if bytes < 1000000 { //if we have less than 1MB in bytes convert to KB
@@ -58,10 +69,37 @@ func CopyFile(srcFile string, destFile string) { //TODO move this to our importe
} }
//SetFilePriority sets the priorities for all of the files in a torrent
func SetFilePriority(t *torrent.Client, db *storm.DB) {
storedTorrents := Storage.FetchAllStoredTorrents(db)
for _, singleTorrent := range t.Torrents() {
for _, storedTorrent := range storedTorrents {
if storedTorrent.Hash == singleTorrent.InfoHash().String() {
for _, file := range singleTorrent.Files() {
for _, storedFile := range storedTorrent.TorrentFilePriority {
if storedFile.TorrentFilePath == file.DisplayPath() {
switch storedFile.TorrentFilePriority {
case "High":
file.SetPriority(torrent.PiecePriorityHigh)
case "Normal":
file.SetPriority(torrent.PiecePriorityNormal)
case "Cancel":
file.SetPriority(torrent.PiecePriorityNone)
default:
file.SetPriority(torrent.PiecePriorityNormal)
}
}
}
}
}
}
}
}
//CalculateTorrentSpeed is used to calculate the torrent upload and download speed over time c is current clientdb, oc is last client db to calculate speed over time //CalculateTorrentSpeed is used to calculate the torrent upload and download speed over time c is current clientdb, oc is last client db to calculate speed over time
func CalculateTorrentSpeed(t *torrent.Torrent, c *ClientDB, oc ClientDB) { func CalculateTorrentSpeed(t *torrent.Torrent, c *ClientDB, oc ClientDB, completedSize int64) {
now := time.Now() now := time.Now()
bytes := t.BytesCompleted() bytes := completedSize
bytesUpload := t.Stats().BytesWrittenData bytesUpload := t.Stats().BytesWrittenData
dt := float32(now.Sub(oc.UpdatedAt)) // get the delta time length between now and last updated dt := float32(now.Sub(oc.UpdatedAt)) // get the delta time length between now and last updated
db := float32(bytes - oc.BytesCompleted) //getting the delta bytes db := float32(bytes - oc.BytesCompleted) //getting the delta bytes
@@ -111,6 +149,9 @@ func CalculateCompletedSize(tFromStorage *Storage.TorrentLocal, activeTorrent *t
} }
} }
downloadedLength := activeTorrent.BytesCompleted() - discardByteLength downloadedLength := activeTorrent.BytesCompleted() - discardByteLength
if downloadedLength < 0 {
downloadedLength = 0
}
return downloadedLength return downloadedLength
} }
@@ -139,16 +180,17 @@ func CalculateUploadRatio(t *torrent.Torrent, c *ClientDB) string {
} }
//CalculateTorrentStatus is used to determine what the STATUS column of the frontend will display ll2 //CalculateTorrentStatus is used to determine what the STATUS column of the frontend will display ll2
func CalculateTorrentStatus(t *torrent.Torrent, c *ClientDB, config FullClientSettings, tFromStorage *storage.TorrentLocal, bytesCompleted int64, totalSize int64) { func CalculateTorrentStatus(t *torrent.Torrent, c *ClientDB, config Settings.FullClientSettings, tFromStorage *storage.TorrentLocal, bytesCompleted int64, totalSize int64) {
if (tFromStorage.TorrentStatus == "Stopped") || (float64(c.TotalUploadedBytes)/float64(bytesCompleted) >= config.SeedRatioStop && tFromStorage.TorrentUploadLimit == true) { //If storage shows torrent stopped or if it is over the seeding ratio AND is under the global limit if (tFromStorage.TorrentStatus == "Stopped") || (float64(c.TotalUploadedBytes)/float64(bytesCompleted) >= config.SeedRatioStop && tFromStorage.TorrentUploadLimit == true) { //If storage shows torrent stopped or if it is over the seeding ratio AND is under the global limit
c.Status = "Stopped" c.Status = "Stopped"
c.MaxConnections = 0 c.MaxConnections = 0
t.SetMaxEstablishedConns(0) t.SetMaxEstablishedConns(0)
} else { //Only has 2 states in storage, stopped or running, so we know it should be running, and the websocket request handled updating the database with connections and status } else { //Only has 2 states in storage, stopped or running, so we know it should be running, and the websocket request handled updating the database with connections and status
bytesMissing := totalSize - bytesCompleted bytesMissing := totalSize - bytesCompleted
c.MaxConnections = 80 c.MaxConnections = 80
t.SetMaxEstablishedConns(80) //TODO this should not be needed but apparently is needed t.SetMaxEstablishedConns(80)
t.DownloadAll() //ensure that we are setting the torrent to download //t.DownloadAll() //ensure that we are setting the torrent to download
if t.Seeding() && t.Stats().ActivePeers > 0 && bytesMissing == 0 { if t.Seeding() && t.Stats().ActivePeers > 0 && bytesMissing == 0 {
c.Status = "Seeding" c.Status = "Seeding"
} else if t.Stats().ActivePeers > 0 && bytesMissing > 0 { } else if t.Stats().ActivePeers > 0 && bytesMissing > 0 {

15
goTorrentWebUI/acorn Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/acorn/bin/acorn" "$@"
ret=$?
else
node "$basedir/node_modules/acorn/bin/acorn" "$@"
ret=$?
fi
exit $ret

7
goTorrentWebUI/acorn.cmd Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\acorn\bin\acorn" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\acorn\bin\acorn" %*
)

15
goTorrentWebUI/ansi-html Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/ansi-html/bin/ansi-html" "$@"
ret=$?
else
node "$basedir/node_modules/ansi-html/bin/ansi-html" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\ansi-html\bin\ansi-html" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\ansi-html\bin\ansi-html" %*
)

15
goTorrentWebUI/atob Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/atob/bin/atob.js" "$@"
ret=$?
else
node "$basedir/node_modules/atob/bin/atob.js" "$@"
ret=$?
fi
exit $ret

7
goTorrentWebUI/atob.cmd Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\atob\bin\atob.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\atob\bin\atob.js" %*
)

View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/browserslist/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/browserslist/cli.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\browserslist\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\browserslist\cli.js" %*
)

15
goTorrentWebUI/cssesc Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/cssesc/bin/cssesc" "$@"
ret=$?
else
node "$basedir/node_modules/cssesc/bin/cssesc" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\cssesc\bin\cssesc" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\cssesc\bin\cssesc" %*
)

15
goTorrentWebUI/csso Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/csso/bin/csso" "$@"
ret=$?
else
node "$basedir/node_modules/csso/bin/csso" "$@"
ret=$?
fi
exit $ret

7
goTorrentWebUI/csso.cmd Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\csso\bin\csso" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\csso\bin\csso" %*
)

15
goTorrentWebUI/detect Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/detect-port-alt/bin/detect-port" "$@"
ret=$?
else
node "$basedir/node_modules/detect-port-alt/bin/detect-port" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/detect-port-alt/bin/detect-port" "$@"
ret=$?
else
node "$basedir/node_modules/detect-port-alt/bin/detect-port" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\detect-port-alt\bin\detect-port" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\detect-port-alt\bin\detect-port" %*
)

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\detect-port-alt\bin\detect-port" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\detect-port-alt\bin\detect-port" %*
)

15
goTorrentWebUI/errno Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/errno/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/errno/cli.js" "$@"
ret=$?
fi
exit $ret

7
goTorrentWebUI/errno.cmd Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\errno\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\errno\cli.js" %*
)

15
goTorrentWebUI/escodegen Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/escodegen/bin/escodegen.js" "$@"
ret=$?
else
node "$basedir/node_modules/escodegen/bin/escodegen.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\escodegen\bin\escodegen.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\escodegen\bin\escodegen.js" %*
)

15
goTorrentWebUI/esgenerate Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/escodegen/bin/esgenerate.js" "$@"
ret=$?
else
node "$basedir/node_modules/escodegen/bin/esgenerate.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\escodegen\bin\esgenerate.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\escodegen\bin\esgenerate.js" %*
)

15
goTorrentWebUI/eslint Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/eslint/bin/eslint.js" "$@"
ret=$?
else
node "$basedir/node_modules/eslint/bin/eslint.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\eslint\bin\eslint.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\eslint\bin\eslint.js" %*
)

15
goTorrentWebUI/esparse Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/esprima/bin/esparse.js" "$@"
ret=$?
else
node "$basedir/node_modules/esprima/bin/esparse.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\esprima\bin\esparse.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\esprima\bin\esparse.js" %*
)

15
goTorrentWebUI/esvalidate Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/esprima/bin/esvalidate.js" "$@"
ret=$?
else
node "$basedir/node_modules/esprima/bin/esvalidate.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\esprima\bin\esvalidate.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\esprima\bin\esvalidate.js" %*
)

15
goTorrentWebUI/handlebars Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/handlebars/bin/handlebars" "$@"
ret=$?
else
node "$basedir/node_modules/handlebars/bin/handlebars" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\handlebars\bin\handlebars" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\handlebars\bin\handlebars" %*
)

15
goTorrentWebUI/he Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/he/bin/he" "$@"
ret=$?
else
node "$basedir/node_modules/he/bin/he" "$@"
ret=$?
fi
exit $ret

7
goTorrentWebUI/he.cmd Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\he\bin\he" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\he\bin\he" %*
)

View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/html-minifier/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/html-minifier/cli.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\html-minifier\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\html-minifier\cli.js" %*
)

View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/import-local/fixtures/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/import-local/fixtures/cli.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\import-local\fixtures\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\import-local\fixtures\cli.js" %*
)

View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/internal-ip/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/internal-ip/cli.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\internal-ip\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\internal-ip\cli.js" %*
)

15
goTorrentWebUI/is-ci Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/is-ci/bin.js" "$@"
ret=$?
else
node "$basedir/node_modules/is-ci/bin.js" "$@"
ret=$?
fi
exit $ret

7
goTorrentWebUI/is-ci.cmd Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\is-ci\bin.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\is-ci\bin.js" %*
)

15
goTorrentWebUI/jest Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/jest/bin/jest.js" "$@"
ret=$?
else
node "$basedir/node_modules/jest/bin/jest.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/jest-runtime/bin/jest-runtime.js" "$@"
ret=$?
else
node "$basedir/node_modules/jest-runtime/bin/jest-runtime.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\jest-runtime\bin\jest-runtime.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\jest-runtime\bin\jest-runtime.js" %*
)

7
goTorrentWebUI/jest.cmd Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\jest\bin\jest.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\jest\bin\jest.js" %*
)

15
goTorrentWebUI/js-yaml Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/js-yaml/bin/js-yaml.js" "$@"
ret=$?
else
node "$basedir/node_modules/js-yaml/bin/js-yaml.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\js-yaml\bin\js-yaml.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\js-yaml\bin\js-yaml.js" %*
)

View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/miller-rabin/bin/miller-rabin" "$@"
ret=$?
else
node "$basedir/node_modules/miller-rabin/bin/miller-rabin" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\miller-rabin\bin\miller-rabin" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\miller-rabin\bin\miller-rabin" %*
)

15
goTorrentWebUI/mime Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/mime/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/mime/cli.js" "$@"
ret=$?
fi
exit $ret

7
goTorrentWebUI/mime.cmd Normal file
View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\mime\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\mime\cli.js" %*
)

View File

@@ -0,0 +1,15 @@
#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/multicast-dns/cli.js" "$@"
ret=$?
else
node "$basedir/node_modules/multicast-dns/cli.js" "$@"
ret=$?
fi
exit $ret

View File

@@ -0,0 +1,7 @@
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\multicast-dns\cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\multicast-dns\cli.js" %*
)

View File

@@ -1,7 +1,7 @@
/** /**
* Bundle of @devexpress/dx-core * Bundle of @devexpress/dx-core
* Generated: 2017-11-10 * Generated: 2018-03-02
* Version: 1.0.0-beta.1 * Version: 1.0.3
* License: https://js.devexpress.com/Licensing * License: https://js.devexpress.com/Licensing
*/ */
@@ -186,22 +186,22 @@ var PluginHost = function () {
this.plugins.filter(function (plugin) { this.plugins.filter(function (plugin) {
return plugin.container; return plugin.container;
}).forEach(function (plugin) { }).forEach(function (plugin) {
if (knownOptionals.has(plugin.pluginName)) { if (knownOptionals.has(plugin.name)) {
throw getDependencyError(knownOptionals.get(plugin.pluginName), plugin.pluginName); throw getDependencyError(knownOptionals.get(plugin.name), plugin.name);
} }
plugin.dependencies.forEach(function (dependency) { plugin.dependencies.forEach(function (dependency) {
if (defined.has(dependency.pluginName)) return; if (defined.has(dependency.name)) return;
if (dependency.optional) { if (dependency.optional) {
if (!knownOptionals.has(dependency.pluginName)) { if (!knownOptionals.has(dependency.name)) {
knownOptionals.set(dependency.pluginName, plugin.pluginName); knownOptionals.set(dependency.name, plugin.name);
} }
return; return;
} }
throw getDependencyError(plugin.pluginName, dependency.pluginName); throw getDependencyError(plugin.name, dependency.name);
}); });
defined.add(plugin.pluginName); defined.add(plugin.name);
}); });
} }
}, { }, {

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
/** /**
* Bundle of @devexpress/dx-core * Bundle of @devexpress/dx-core
* Generated: 2017-11-10 * Generated: 2018-03-02
* Version: 1.0.0-beta.1 * Version: 1.0.3
* License: https://js.devexpress.com/Licensing * License: https://js.devexpress.com/Licensing
*/ */
@@ -192,22 +192,22 @@ var PluginHost = function () {
this.plugins.filter(function (plugin) { this.plugins.filter(function (plugin) {
return plugin.container; return plugin.container;
}).forEach(function (plugin) { }).forEach(function (plugin) {
if (knownOptionals.has(plugin.pluginName)) { if (knownOptionals.has(plugin.name)) {
throw getDependencyError(knownOptionals.get(plugin.pluginName), plugin.pluginName); throw getDependencyError(knownOptionals.get(plugin.name), plugin.name);
} }
plugin.dependencies.forEach(function (dependency) { plugin.dependencies.forEach(function (dependency) {
if (defined.has(dependency.pluginName)) return; if (defined.has(dependency.name)) return;
if (dependency.optional) { if (dependency.optional) {
if (!knownOptionals.has(dependency.pluginName)) { if (!knownOptionals.has(dependency.name)) {
knownOptionals.set(dependency.pluginName, plugin.pluginName); knownOptionals.set(dependency.name, plugin.name);
} }
return; return;
} }
throw getDependencyError(plugin.pluginName, dependency.pluginName); throw getDependencyError(plugin.name, dependency.name);
}); });
defined.add(plugin.pluginName); defined.add(plugin.name);
}); });
} }
}, { }, {

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,8 @@
{ {
"_from": "@devexpress/dx-core", "_from": "@devexpress/dx-core",
"_id": "@devexpress/dx-core@1.0.0-beta.1", "_id": "@devexpress/dx-core@1.0.3",
"_inBundle": false, "_inBundle": false,
"_integrity": "sha512-4Kv5RTlmlK7o2DF5BB5r2yWgshvFrUSHWzJzdSyBtFxsQzvI3vJqS0Z0mAplZCyYfRk4xh9SRp6I9DML66v0EQ==", "_integrity": "sha512-M1Kjju074ddAQmaFuKypM/LdhCZsDISqhGj4LST2ZGQPlGpH89BMBEV8p+8MedFQQCG/svuS25AKip1Gs9KJgA==",
"_location": "/@devexpress/dx-core", "_location": "/@devexpress/dx-core",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
@@ -19,10 +19,10 @@
"_requiredBy": [ "_requiredBy": [
"#USER" "#USER"
], ],
"_resolved": "https://registry.npmjs.org/@devexpress/dx-core/-/dx-core-1.0.0-beta.1.tgz", "_resolved": "https://registry.npmjs.org/@devexpress/dx-core/-/dx-core-1.0.3.tgz",
"_shasum": "63383ec2bd3903d9a163c1316706cde32227d6b4", "_shasum": "c310b540229f83d6be5797fb2a5da5491757d21b",
"_spec": "@devexpress/dx-core", "_spec": "@devexpress/dx-core",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI",
"author": { "author": {
"name": "Developer Express Inc.", "name": "Developer Express Inc.",
"url": "https://www.devexpress.com/" "url": "https://www.devexpress.com/"
@@ -35,20 +35,20 @@
"description": "Core library for DevExtreme Reactive Components", "description": "Core library for DevExtreme Reactive Components",
"devDependencies": { "devDependencies": {
"babel-core": "^6.26.0", "babel-core": "^6.26.0",
"babel-jest": "^21.2.0", "babel-jest": "^22.1.0",
"babel-plugin-external-helpers": "^6.22.0", "babel-plugin-external-helpers": "^6.22.0",
"babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-plugin-transform-runtime": "^6.23.0", "babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.24.1",
"core-js": "^2.5.1", "core-js": "^2.5.3",
"eslint": "^4.10.0", "eslint": "^4.16.0",
"eslint-config-airbnb-base": "^12.1.0", "eslint-config-airbnb-base": "^12.1.0",
"eslint-plugin-filenames": "^1.2.0", "eslint-plugin-filenames": "^1.2.0",
"eslint-plugin-import": "^2.8.0", "eslint-plugin-import": "^2.8.0",
"eslint-plugin-jest": "^21.3.0", "eslint-plugin-jest": "^21.7.0",
"jest": "^21.2.1", "jest": "^22.1.4",
"rollup": "0.50.0", "rollup": "0.50.0",
"rollup-plugin-babel": "^3.0.2", "rollup-plugin-babel": "^3.0.3",
"rollup-plugin-license": "^0.5.0" "rollup-plugin-license": "^0.5.0"
}, },
"files": [ "files": [
@@ -81,5 +81,5 @@
"test:coverage": "jest --coverage", "test:coverage": "jest --coverage",
"test:watch": "jest --watch" "test:watch": "jest --watch"
}, },
"version": "1.0.0-beta.1" "version": "1.0.3"
} }

View File

@@ -1,7 +1,7 @@
/** /**
* Bundle of @devexpress/dx-grid-core * Bundle of @devexpress/dx-grid-core
* Generated: 2017-11-10 * Generated: 2018-03-02
* Version: 1.0.0-beta.1 * Version: 1.0.3
* License: https://js.devexpress.com/Licensing * License: https://js.devexpress.com/Licensing
*/ */
@@ -19,10 +19,12 @@ var rowIdGetter = function rowIdGetter(getRowId, rows) {
return getRowId; return getRowId;
}; };
var cellValueGetter = function cellValueGetter(getCellValue, columns) { var defaultGetCellValue = function defaultGetCellValue(row, columnName) {
if (getCellValue) { return row[columnName];
return getCellValue; };
} var cellValueGetter = function cellValueGetter() {
var getCellValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultGetCellValue;
var columns = arguments[1];
var useFastAccessor = true; var useFastAccessor = true;
var map = columns.reduce(function (acc, column) { var map = columns.reduce(function (acc, column) {
@@ -33,28 +35,29 @@ var cellValueGetter = function cellValueGetter(getCellValue, columns) {
return acc; return acc;
}, {}); }, {});
return useFastAccessor ? function (row, columnName) { if (useFastAccessor) {
return row[columnName]; return getCellValue;
} : function (row, columnName) { }
return map[columnName] ? map[columnName](row, columnName) : row[columnName];
return function (row, columnName) {
return map[columnName] ? map[columnName](row, columnName) : getCellValue(row, columnName);
}; };
}; };
var setColumnSorting = function setColumnSorting(state, _ref) { var changeColumnSorting = function changeColumnSorting(state, _ref) {
var columnName = _ref.columnName, var columnName = _ref.columnName,
direction = _ref.direction, direction = _ref.direction,
keepOther = _ref.keepOther, keepOther = _ref.keepOther,
cancel = _ref.cancel,
sortIndex = _ref.sortIndex; sortIndex = _ref.sortIndex;
var sorting = state.sorting; var sorting = state.sorting;
var nextSorting = []; var nextSorting = [];
if (keepOther === true) { if (keepOther === true) {
nextSorting = Array.from(sorting).slice(); nextSorting = sorting.slice();
} }
if (Array.isArray(keepOther)) { if (Array.isArray(keepOther)) {
nextSorting = Array.from(sorting).filter(function (columnSorting) { nextSorting = sorting.slice().filter(function (columnSorting) {
return keepOther.indexOf(columnSorting.columnName) > -1; return keepOther.indexOf(columnSorting.columnName) > -1;
}); });
} }
@@ -72,7 +75,7 @@ var setColumnSorting = function setColumnSorting(state, _ref) {
nextSorting.splice(columnSortingIndex, 1); nextSorting.splice(columnSortingIndex, 1);
} }
if (!cancel) { if (direction !== null) {
var newIndexFallback = columnSortingIndex > -1 ? columnSortingIndex : nextSorting.length; var newIndexFallback = columnSortingIndex > -1 ? columnSortingIndex : nextSorting.length;
var newIndex = sortIndex !== undefined ? sortIndex : newIndexFallback; var newIndex = sortIndex !== undefined ? sortIndex : newIndexFallback;
nextSorting.splice(newIndex, 0, newColumnSorting); nextSorting.splice(newIndex, 0, newColumnSorting);
@@ -446,7 +449,7 @@ var defaultCompare = function defaultCompare(a, b) {
}; };
var createCompare = function createCompare(sorting, getColumnCompare, getComparableValue) { var createCompare = function createCompare(sorting, getColumnCompare, getComparableValue) {
return Array.from(sorting).reverse().reduce(function (prevCompare, columnSorting) { return sorting.slice().reverse().reduce(function (prevCompare, columnSorting) {
var columnName = columnSorting.columnName; var columnName = columnSorting.columnName;
var inverse = columnSorting.direction === 'desc'; var inverse = columnSorting.direction === 'desc';
@@ -495,7 +498,7 @@ var sortedRows = function sortedRows(rows, sorting, getCellValue, getColumnCompa
if (!getRowLevelKey) { if (!getRowLevelKey) {
var _compare = createCompare(sorting, getColumnCompare, getCellValue); var _compare = createCompare(sorting, getColumnCompare, getCellValue);
return mergeSort(Array.from(rows), _compare); return mergeSort(rows.slice(), _compare);
} }
var compare = createCompare(sorting, getColumnCompare, function (row, columnName) { var compare = createCompare(sorting, getColumnCompare, function (row, columnName) {
@@ -510,14 +513,14 @@ var sortedRows = function sortedRows(rows, sorting, getCellValue, getColumnCompa
return sortHierarchicalRows(rows, compare, getRowLevelKey); return sortHierarchicalRows(rows, compare, getRowLevelKey);
}; };
var setColumnFilter = function setColumnFilter(filters, _ref) { var changeColumnFilter = function changeColumnFilter(filters, _ref) {
var columnName = _ref.columnName, var columnName = _ref.columnName,
config = _ref.config; config = _ref.config;
var filterIndex = filters.findIndex(function (f) { var filterIndex = filters.findIndex(function (f) {
return f.columnName === columnName; return f.columnName === columnName;
}); });
var nextState = Array.from(filters); var nextState = filters.slice();
if (config) { if (config) {
var filter = _extends({ columnName: columnName }, config); var filter = _extends({ columnName: columnName }, config);
@@ -624,56 +627,67 @@ var filteredRows = function filteredRows(rows, filters, getCellValue, getColumnP
var GROUP_KEY_SEPARATOR = '|'; var GROUP_KEY_SEPARATOR = '|';
var groupByColumn = function groupByColumn(state, _ref) { var applyColumnGrouping = function applyColumnGrouping(grouping, _ref) {
var columnName = _ref.columnName, var columnName = _ref.columnName,
groupIndex = _ref.groupIndex; groupIndex = _ref.groupIndex;
var grouping = Array.from(state.grouping); var nextGrouping = grouping.slice();
var groupingIndex = grouping.findIndex(function (g) { var groupingIndex = nextGrouping.findIndex(function (g) {
return g.columnName === columnName; return g.columnName === columnName;
}); });
var targetIndex = groupIndex; var targetIndex = groupIndex;
if (groupingIndex > -1) { if (groupingIndex > -1) {
grouping.splice(groupingIndex, 1); nextGrouping.splice(groupingIndex, 1);
} else if (groupIndex === undefined) { } else if (groupIndex === undefined) {
targetIndex = grouping.length; targetIndex = nextGrouping.length;
} }
if (targetIndex > -1) { if (targetIndex > -1) {
grouping.splice(targetIndex, 0, { nextGrouping.splice(targetIndex, 0, {
columnName: columnName columnName: columnName
}); });
} }
var ungroupedColumnIndex = state.grouping.findIndex(function (group, index) { return nextGrouping;
return !grouping[index] || group.columnName !== grouping[index].columnName; };
var changeColumnGrouping = function changeColumnGrouping(_ref2, _ref3) {
var grouping = _ref2.grouping,
expandedGroups = _ref2.expandedGroups;
var columnName = _ref3.columnName,
groupIndex = _ref3.groupIndex;
var nextGrouping = applyColumnGrouping(grouping, { columnName: columnName, groupIndex: groupIndex });
var ungroupedColumnIndex = grouping.findIndex(function (group, index) {
return !nextGrouping[index] || group.columnName !== nextGrouping[index].columnName;
}); });
if (ungroupedColumnIndex === -1) { if (ungroupedColumnIndex === -1) {
return { return {
grouping: grouping grouping: nextGrouping
}; };
} }
var filteredExpandedGroups = state.expandedGroups.filter(function (group) { var filteredExpandedGroups = expandedGroups.filter(function (group) {
return group.split(GROUP_KEY_SEPARATOR).length <= ungroupedColumnIndex; return group.split(GROUP_KEY_SEPARATOR).length <= ungroupedColumnIndex;
}); });
if (filteredExpandedGroups.length === state.expandedGroups.length) { if (filteredExpandedGroups.length === expandedGroups.length) {
return { return {
grouping: grouping grouping: nextGrouping
}; };
} }
return { return {
grouping: grouping, grouping: nextGrouping,
expandedGroups: filteredExpandedGroups expandedGroups: filteredExpandedGroups
}; };
}; };
var toggleExpandedGroups = function toggleExpandedGroups(state, _ref2) { var toggleExpandedGroups = function toggleExpandedGroups(state, _ref4) {
var groupKey = _ref2.groupKey; var groupKey = _ref4.groupKey;
var expandedGroups = Array.from(state.expandedGroups); var expandedGroups = state.expandedGroups.slice();
var groupKeyIndex = expandedGroups.indexOf(groupKey); var groupKeyIndex = expandedGroups.indexOf(groupKey);
if (groupKeyIndex > -1) { if (groupKeyIndex > -1) {
@@ -687,40 +701,20 @@ var toggleExpandedGroups = function toggleExpandedGroups(state, _ref2) {
}; };
}; };
var draftGroupingChange = function draftGroupingChange(state, _ref3) { var draftColumnGrouping = function draftColumnGrouping(_ref5, _ref6) {
var columnName = _ref3.columnName, var grouping = _ref5.grouping,
groupIndex = _ref3.groupIndex; draftGrouping = _ref5.draftGrouping;
return { groupingChange: { columnName: columnName, groupIndex: groupIndex } }; var columnName = _ref6.columnName,
groupIndex = _ref6.groupIndex;
return {
draftGrouping: applyColumnGrouping(draftGrouping || grouping, { columnName: columnName, groupIndex: groupIndex })
};
}; };
var cancelGroupingChange = function cancelGroupingChange() { var cancelColumnGroupingDraft = function cancelColumnGroupingDraft() {
return { groupingChange: null }; return {
}; draftGrouping: null
};
var draftGrouping = function draftGrouping(grouping, groupingChange) {
if (!groupingChange) return grouping;
var columnName = groupingChange.columnName,
groupIndex = groupingChange.groupIndex;
var result = Array.from(grouping);
if (groupIndex !== -1) {
result = result.filter(function (g) {
return g.columnName !== columnName;
});
result.splice(groupIndex, 0, {
columnName: columnName,
draft: true,
mode: grouping.length > result.length ? 'reorder' : 'add'
});
} else {
result = result.map(function (g) {
return g.columnName === columnName ? { columnName: columnName, draft: true, mode: 'remove' } : g;
});
}
return result;
}; };
var GRID_GROUP_TYPE = 'group'; var GRID_GROUP_TYPE = 'group';
@@ -735,26 +729,26 @@ var groupRowLevelKeyGetter = function groupRowLevelKeyGetter(row) {
return row[GRID_GROUP_LEVEL_KEY]; return row[GRID_GROUP_LEVEL_KEY];
}; };
var defaultColumnIdentity = function defaultColumnIdentity(value) { var defaultColumnCriteria = function defaultColumnCriteria(value) {
return { return {
key: String(value), key: String(value),
value: value value: value
}; };
}; };
var groupedRows = function groupedRows(rows, grouping, getCellValue, getColumnIdentity) { var groupedRows = function groupedRows(rows, grouping, getCellValue, getColumnCriteria) {
var keyPrefix = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; var keyPrefix = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
if (!grouping.length) return rows; if (!grouping.length) return rows;
var columnName = grouping[0].columnName; var columnName = grouping[0].columnName;
var groupIdentity = getColumnIdentity && getColumnIdentity(columnName) || defaultColumnIdentity; var groupCriteria = getColumnCriteria && getColumnCriteria(columnName) || defaultColumnCriteria;
var groups = rows.reduce(function (acc, row) { var groups = rows.reduce(function (acc, row) {
var _groupIdentity = groupIdentity(getCellValue(row, columnName), row), var _groupCriteria = groupCriteria(getCellValue(row, columnName), row),
key = _groupIdentity.key, key = _groupCriteria.key,
_groupIdentity$value = _groupIdentity.value, _groupCriteria$value = _groupCriteria.value,
value = _groupIdentity$value === undefined ? key : _groupIdentity$value; value = _groupCriteria$value === undefined ? key : _groupCriteria$value;
var sameKeyItems = acc.get(key); var sameKeyItems = acc.get(key);
@@ -778,7 +772,7 @@ var groupedRows = function groupedRows(rows, grouping, getCellValue, getColumnId
var compoundKey = '' + keyPrefix + key; var compoundKey = '' + keyPrefix + key;
acc.push((_acc$push = {}, defineProperty(_acc$push, GRID_GROUP_CHECK, true), defineProperty(_acc$push, GRID_GROUP_LEVEL_KEY, GRID_GROUP_TYPE + '_' + groupedBy), defineProperty(_acc$push, 'groupedBy', groupedBy), defineProperty(_acc$push, 'compoundKey', compoundKey), defineProperty(_acc$push, 'key', key), defineProperty(_acc$push, 'value', value), _acc$push)); acc.push((_acc$push = {}, defineProperty(_acc$push, GRID_GROUP_CHECK, true), defineProperty(_acc$push, GRID_GROUP_LEVEL_KEY, GRID_GROUP_TYPE + '_' + groupedBy), defineProperty(_acc$push, 'groupedBy', groupedBy), defineProperty(_acc$push, 'compoundKey', compoundKey), defineProperty(_acc$push, 'key', key), defineProperty(_acc$push, 'value', value), _acc$push));
acc.push.apply(acc, toConsumableArray(groupedRows(items, nestedGrouping, getCellValue, getColumnIdentity, '' + compoundKey + GROUP_KEY_SEPARATOR))); acc.push.apply(acc, toConsumableArray(groupedRows(items, nestedGrouping, getCellValue, getColumnCriteria, '' + compoundKey + GROUP_KEY_SEPARATOR)));
return acc; return acc;
}, []); }, []);
}; };
@@ -789,6 +783,7 @@ var expandedGroupRows = function expandedGroupRows(rows, grouping, expandedGroup
var groupingColumnNames = grouping.map(function (columnGrouping) { var groupingColumnNames = grouping.map(function (columnGrouping) {
return columnGrouping.columnName; return columnGrouping.columnName;
}); });
var expandedGroupsSet = new Set(expandedGroups);
var currentGroupExpanded = true; var currentGroupExpanded = true;
var currentGroupLevel = 0; var currentGroupLevel = 0;
@@ -807,7 +802,7 @@ var expandedGroupRows = function expandedGroupRows(rows, grouping, expandedGroup
return acc; return acc;
} }
currentGroupExpanded = expandedGroups.has(row.compoundKey); currentGroupExpanded = expandedGroupsSet.has(row.compoundKey);
currentGroupLevel = groupLevel; currentGroupLevel = groupLevel;
if (currentGroupExpanded) { if (currentGroupExpanded) {
@@ -864,19 +859,34 @@ var customGroupingRowIdGetter = function customGroupingRowIdGetter(getRowId, row
}; };
}; };
var groupingPanelItems = function groupingPanelItems(columns, grouping) { var groupingPanelItems = function groupingPanelItems(columns, grouping, draftGrouping) {
return grouping.map(function (_ref) { var items = draftGrouping.map(function (_ref) {
var columnName = _ref.columnName, var columnName = _ref.columnName;
draft = _ref.draft;
var column = columns.find(function (c) {
return c.name === columnName;
});
return { return {
column: column, column: columns.find(function (c) {
draft: draft return c.name === columnName;
}),
draft: !grouping.some(function (columnGrouping) {
return columnGrouping.columnName === columnName;
})
}; };
}); });
grouping.forEach(function (_ref2, index) {
var columnName = _ref2.columnName;
if (draftGrouping.some(function (columnGrouping) {
return columnGrouping.columnName === columnName;
})) return;
items.splice(index, 0, {
column: columns.find(function (c) {
return c.name === columnName;
}),
draft: true
});
});
return items;
}; };
var setCurrentPage = function setCurrentPage(prevPage, page) { var setCurrentPage = function setCurrentPage(prevPage, page) {
@@ -955,47 +965,21 @@ var lastRowOnPage = function lastRowOnPage(currentPage, pageSize, totalRowCount)
return result; return result;
}; };
var setRowSelection = function setRowSelection(selection, _ref) { var toggleSelection = function toggleSelection(selection, _ref) {
var rowId = _ref.rowId, var rowIds = _ref.rowIds,
selected = _ref.selected; state = _ref.state;
var selectedRows = Array.from(selection);
var selectedIndex = selectedRows.indexOf(rowId);
var isRowSelected = selected;
if (isRowSelected === undefined) {
isRowSelected = selectedIndex === -1;
}
if (selectedIndex > -1 && !isRowSelected) {
selectedRows.splice(selectedIndex, 1);
} else if (selectedIndex === -1 && isRowSelected) {
selectedRows.push(rowId);
}
return selectedRows;
};
var setRowsSelection = function setRowsSelection(selection, _ref2) {
var rowIds = _ref2.rowIds,
selected = _ref2.selected;
if (rowIds.length === 1) {
return setRowSelection(selection, { rowId: rowIds[0], selected: selected });
}
var rowIdsSet = new Set(rowIds); var rowIdsSet = new Set(rowIds);
var isRowsSelected = selected; var rowsState = state;
if (isRowsSelected === undefined) { if (rowsState === undefined) {
var availableSelection = selection.filter(function (rowId) { var availableSelection = selection.filter(function (rowId) {
return rowIdsSet.has(rowId); return rowIdsSet.has(rowId);
}); });
isRowsSelected = availableSelection.length !== rowIdsSet.size; rowsState = availableSelection.length !== rowIdsSet.size;
} }
if (isRowsSelected) { if (rowsState) {
var selectionSet = new Set(selection); var selectionSet = new Set(selection);
return [].concat(toConsumableArray(selection), toConsumableArray(rowIds.filter(function (rowId) { return [].concat(toConsumableArray(selection), toConsumableArray(rowIds.filter(function (rowId) {
return !selectionSet.has(rowId); return !selectionSet.has(rowId);
@@ -1007,41 +991,63 @@ var setRowsSelection = function setRowsSelection(selection, _ref2) {
}); });
}; };
var getAvailableToSelect = function getAvailableToSelect(rows, getRowId, isGroupRow) { var rowsWithAvailableToSelect = function rowsWithAvailableToSelect(rows, getRowId, isGroupRow) {
var dataRows = rows; var dataRows = rows;
if (isGroupRow) { if (isGroupRow) {
dataRows = dataRows.filter(function (row) { dataRows = dataRows.filter(function (row) {
return !isGroupRow(row); return !isGroupRow(row);
}); });
} }
return dataRows.map(function (row) { return { rows: rows, availableToSelect: dataRows.map(function (row) {
return getRowId(row); return getRowId(row);
}) };
};
var someSelected = function someSelected(_ref, selection) {
var availableToSelect = _ref.availableToSelect;
var selectionSet = new Set(selection);
return availableToSelect.length !== 0 && selectionSet.size !== 0 && availableToSelect.some(function (elem) {
return selectionSet.has(elem);
}) && availableToSelect.some(function (elem) {
return !selectionSet.has(elem);
}); });
}; };
var getAvailableSelection = function getAvailableSelection(selection, availableToSelect) { var allSelected = function allSelected(_ref2, selection) {
var availableToSelectSet = new Set(availableToSelect); var availableToSelect = _ref2.availableToSelect;
return selection.filter(function (selected) {
return availableToSelectSet.has(selected); var selectionSet = new Set(selection);
return selectionSet.size !== 0 && availableToSelect.length !== 0 && !availableToSelect.some(function (elem) {
return !selectionSet.has(elem);
}); });
}; };
var startEditRows = function startEditRows(prevEditingRows, _ref) { var unwrapSelectedRows = function unwrapSelectedRows(_ref3) {
var rows = _ref3.rows;
return rows;
};
var startEditRows = function startEditRows(prevEditingRowIds, _ref) {
var rowIds = _ref.rowIds; var rowIds = _ref.rowIds;
return [].concat(toConsumableArray(prevEditingRows), toConsumableArray(rowIds)); return [].concat(toConsumableArray(prevEditingRowIds), toConsumableArray(rowIds));
}; };
var stopEditRows = function stopEditRows(prevEditingRows, _ref2) { var stopEditRows = function stopEditRows(prevEditingRowIds, _ref2) {
var rowIds = _ref2.rowIds; var rowIds = _ref2.rowIds;
var rowIdSet = new Set(rowIds); var rowIdSet = new Set(rowIds);
return prevEditingRows.filter(function (id) { return prevEditingRowIds.filter(function (id) {
return !rowIdSet.has(id); return !rowIdSet.has(id);
}); });
}; };
var addRow = function addRow(addedRows, _ref3) { var addRow = function addRow(addedRows) {
var row = _ref3.row; var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { row: {} },
row = _ref3.row;
return [].concat(toConsumableArray(addedRows), [row]); return [].concat(toConsumableArray(addedRows), [row]);
}; };
@@ -1049,7 +1055,7 @@ var changeAddedRow = function changeAddedRow(addedRows, _ref4) {
var rowId = _ref4.rowId, var rowId = _ref4.rowId,
change = _ref4.change; change = _ref4.change;
var result = Array.from(addedRows); var result = addedRows.slice();
result[rowId] = _extends({}, result[rowId], change); result[rowId] = _extends({}, result[rowId], change);
return result; return result;
}; };
@@ -1067,34 +1073,34 @@ var cancelAddedRows = function cancelAddedRows(addedRows, _ref5) {
return result; return result;
}; };
var changeRow = function changeRow(prevChangedRows, _ref6) { var changeRow = function changeRow(prevRowChanges, _ref6) {
var rowId = _ref6.rowId, var rowId = _ref6.rowId,
change = _ref6.change; change = _ref6.change;
var prevChange = prevChangedRows[rowId] || {}; var prevChange = prevRowChanges[rowId] || {};
return _extends({}, prevChangedRows, defineProperty({}, rowId, _extends({}, prevChange, change))); return _extends({}, prevRowChanges, defineProperty({}, rowId, _extends({}, prevChange, change)));
}; };
var cancelChanges = function cancelChanges(prevChangedRows, _ref7) { var cancelChanges = function cancelChanges(prevRowChanges, _ref7) {
var rowIds = _ref7.rowIds; var rowIds = _ref7.rowIds;
var result = _extends({}, prevChangedRows); var result = _extends({}, prevRowChanges);
rowIds.forEach(function (rowId) { rowIds.forEach(function (rowId) {
delete result[rowId]; delete result[rowId];
}); });
return result; return result;
}; };
var deleteRows = function deleteRows(deletedRows, _ref8) { var deleteRows = function deleteRows(deletedRowIds, _ref8) {
var rowIds = _ref8.rowIds; var rowIds = _ref8.rowIds;
return [].concat(toConsumableArray(deletedRows), toConsumableArray(rowIds)); return [].concat(toConsumableArray(deletedRowIds), toConsumableArray(rowIds));
}; };
var cancelDeletedRows = function cancelDeletedRows(deletedRows, _ref9) { var cancelDeletedRows = function cancelDeletedRows(deletedRowIds, _ref9) {
var rowIds = _ref9.rowIds; var rowIds = _ref9.rowIds;
var rowIdSet = new Set(rowIds); var rowIdSet = new Set(rowIds);
return deletedRows.filter(function (rowId) { return deletedRowIds.filter(function (rowId) {
return !rowIdSet.has(rowId); return !rowIdSet.has(rowId);
}); });
}; };
@@ -1118,21 +1124,30 @@ var addedRowsByIds = function addedRowsByIds(addedRows, rowIds) {
return result; return result;
}; };
var computedCreateRowChange = function computedCreateRowChange(columns) { var defaultCreateRowChange = function defaultCreateRowChange(row, value, columnName) {
var map = columns.reduce(function (acc, column) { return defineProperty({}, columnName, value);
if (column.createRowChange) { };
acc[column.name] = column.createRowChange; var createRowChangeGetter = function createRowChangeGetter() {
var createRowChange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultCreateRowChange;
var columnExtensions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var map = columnExtensions.reduce(function (acc, columnExtension) {
if (columnExtension.createRowChange) {
acc[columnExtension.columnName] = columnExtension.createRowChange;
} }
return acc; return acc;
}, {}); }, {});
return function (row, columnName, value) { return function (row, value, columnName) {
return map[columnName] ? map[columnName](row, value, columnName) : defineProperty({}, columnName, value); if (map[columnName]) {
return map[columnName](row, value, columnName);
}
return createRowChange(row, value, columnName);
}; };
}; };
var getRowChange = function getRowChange(changedRows, rowId) { var getRowChange = function getRowChange(rowChanges, rowId) {
return changedRows[rowId] || {}; return rowChanges[rowId] || {};
}; };
var TABLE_REORDERING_TYPE = 'reordering'; var TABLE_REORDERING_TYPE = 'reordering';
@@ -1143,7 +1158,7 @@ var changeColumnOrder = function changeColumnOrder(order, _ref) {
var sourceColumnIndex = order.indexOf(sourceColumnName); var sourceColumnIndex = order.indexOf(sourceColumnName);
var targetColumnIndex = order.indexOf(targetColumnName); var targetColumnIndex = order.indexOf(targetColumnName);
var newOrder = Array.from(order); var newOrder = order.slice();
newOrder.splice(sourceColumnIndex, 1); newOrder.splice(sourceColumnIndex, 1);
newOrder.splice(targetColumnIndex, 0, sourceColumnName); newOrder.splice(targetColumnIndex, 0, sourceColumnName);
@@ -1154,7 +1169,7 @@ var TABLE_DATA_TYPE = 'data';
var TABLE_NODATA_TYPE = 'nodata'; var TABLE_NODATA_TYPE = 'nodata';
var orderedColumns = function orderedColumns(tableColumns, order) { var orderedColumns = function orderedColumns(tableColumns, order) {
var result = Array.from(tableColumns); var result = tableColumns.slice();
result.sort(function (a, b) { result.sort(function (a, b) {
if (a.type !== TABLE_DATA_TYPE || b.type !== TABLE_DATA_TYPE) return 0; if (a.type !== TABLE_DATA_TYPE || b.type !== TABLE_DATA_TYPE) return 0;
@@ -1194,7 +1209,11 @@ var tableColumnsWithWidths = function tableColumnsWithWidths(tableColumns, colum
return tableColumns.reduce(function (acc, tableColumn) { return tableColumns.reduce(function (acc, tableColumn) {
if (tableColumn.type === 'data') { if (tableColumn.type === 'data') {
var columnName = tableColumn.column.name; var columnName = tableColumn.column.name;
var width = draftColumnWidths[columnName] || columnWidths[columnName]; var isCurrentColumn = function isCurrentColumn(elem) {
return elem.columnName === columnName;
};
var column = draftColumnWidths.find(isCurrentColumn) || columnWidths.find(isCurrentColumn);
var width = column && column.width;
if (width === undefined) { if (width === undefined) {
throw new Error(UNSET_COLUMN_WIDTH_ERROR.replace('$1', columnName)); throw new Error(UNSET_COLUMN_WIDTH_ERROR.replace('$1', columnName));
} }
@@ -1208,36 +1227,43 @@ var tableColumnsWithWidths = function tableColumnsWithWidths(tableColumns, colum
var MIN_SIZE = 40; var MIN_SIZE = 40;
var changeTableColumnWidths = function changeTableColumnWidths(state, _ref) { var changeTableColumnWidth = function changeTableColumnWidth(state, _ref) {
var shifts = _ref.shifts; var columnName = _ref.columnName,
shift = _ref.shift;
var columnWidths = state.columnWidths; var columnWidths = state.columnWidths;
var updatedColumnWidths = Object.keys(shifts).reduce(function (acc, columnName) { var nextColumnWidth = columnWidths.slice();
var size = Math.max(MIN_SIZE, columnWidths[columnName] + shifts[columnName]); var index = nextColumnWidth.findIndex(function (elem) {
return Object.assign(acc, defineProperty({}, columnName, size)); return elem.columnName === columnName;
}, {});
return _extends({}, state, {
columnWidths: _extends({}, columnWidths, updatedColumnWidths),
draftColumnWidths: {}
}); });
var updatedColumn = nextColumnWidth[index];
var size = Math.max(MIN_SIZE, updatedColumn.width + shift);
nextColumnWidth.splice(index, 1, { columnName: columnName, width: size });
return {
columnWidths: nextColumnWidth
};
}; };
var changeDraftTableColumnWidths = function changeDraftTableColumnWidths(state, _ref2) { var draftTableColumnWidth = function draftTableColumnWidth(state, _ref2) {
var shifts = _ref2.shifts; var columnName = _ref2.columnName,
var columnWidths = state.columnWidths, shift = _ref2.shift;
draftColumnWidths = state.draftColumnWidths; var columnWidths = state.columnWidths;
var updatedDraftColumnWidths = Object.keys(shifts).reduce(function (acc, columnName) { var updatedColumn = columnWidths.find(function (elem) {
if (shifts[columnName] === null) { return elem.columnName === columnName;
delete acc[columnName];
return acc;
}
var size = Math.max(MIN_SIZE, columnWidths[columnName] + shifts[columnName]);
return Object.assign(acc, defineProperty({}, columnName, size));
}, Object.assign({}, draftColumnWidths));
return _extends({}, state, {
draftColumnWidths: updatedDraftColumnWidths
}); });
var size = Math.max(MIN_SIZE, updatedColumn.width + shift);
return {
draftColumnWidths: [{ columnName: updatedColumn.columnName, width: size }]
};
};
var cancelTableColumnWidthDraft = function cancelTableColumnWidthDraft() {
return {
draftColumnWidths: []
};
}; };
var TABLE_EDIT_COMMAND_TYPE = 'editCommand'; var TABLE_EDIT_COMMAND_TYPE = 'editCommand';
@@ -1268,8 +1294,8 @@ var isEditTableRow = function isEditTableRow(tableRow) {
return tableRow.type === TABLE_EDIT_TYPE; return tableRow.type === TABLE_EDIT_TYPE;
}; };
var tableRowsWithEditing = function tableRowsWithEditing(tableRows, editingRows, addedRows, rowHeight) { var tableRowsWithEditing = function tableRowsWithEditing(tableRows, editingRowIds, addedRows, rowHeight) {
var rowIds = new Set(editingRows); var rowIds = new Set(editingRowIds);
var editedTableRows = tableRows.map(function (tableRow) { var editedTableRows = tableRows.map(function (tableRow) {
return tableRow.type === TABLE_DATA_TYPE && rowIds.has(tableRow.rowId) ? _extends({}, tableRow, { return tableRow.type === TABLE_DATA_TYPE && rowIds.has(tableRow.rowId) ? _extends({}, tableRow, {
type: TABLE_EDIT_TYPE, type: TABLE_EDIT_TYPE,
@@ -1315,37 +1341,44 @@ var isGroupTableRow = function isGroupTableRow(tableRow) {
return tableRow.type === TABLE_GROUP_TYPE; return tableRow.type === TABLE_GROUP_TYPE;
}; };
var tableColumnsWithDraftGrouping = function tableColumnsWithDraftGrouping(tableColumns, draftGrouping, showColumnWhenGrouped) { var tableColumnsWithDraftGrouping = function tableColumnsWithDraftGrouping(tableColumns, grouping, draftGrouping, showColumnWhenGrouped) {
return tableColumns.reduce(function (acc, tableColumn) { return tableColumns.reduce(function (acc, tableColumn) {
var isDataColumn = tableColumn.type === TABLE_DATA_TYPE; if (tableColumn.type !== TABLE_DATA_TYPE) {
var tableColumnName = isDataColumn ? tableColumn.column.name : ''; acc.push(tableColumn);
var columnDraftGrouping = draftGrouping.find(function (grouping) { return acc;
return grouping.columnName === tableColumnName; }
var columnName = tableColumn.column.name;
var columnGroupingExists = grouping.some(function (columnGrouping) {
return columnGrouping.columnName === columnName;
});
var columnDraftGroupingExists = draftGrouping.some(function (columnGrouping) {
return columnGrouping.columnName === columnName;
}); });
if (!columnDraftGrouping || showColumnWhenGrouped(tableColumnName)) { if (!columnGroupingExists && !columnDraftGroupingExists || showColumnWhenGrouped(columnName)) {
return [].concat(toConsumableArray(acc), [tableColumn]); acc.push(tableColumn);
} else if (columnDraftGrouping.mode === 'remove' || columnDraftGrouping.mode === 'add') { } else if (!columnGroupingExists && columnDraftGroupingExists || columnGroupingExists && !columnDraftGroupingExists) {
return [].concat(toConsumableArray(acc), [_extends({}, tableColumn, { acc.push(_extends({}, tableColumn, {
draft: true draft: true
})]); }));
} }
return acc; return acc;
}, []); }, []);
}; };
var tableColumnsWithGrouping = function tableColumnsWithGrouping(tableColumns, grouping, draftGrouping, groupIndentColumnWidth, showColumnWhenGrouped) { var tableColumnsWithGrouping = function tableColumnsWithGrouping(columns, tableColumns, grouping, draftGrouping, indentColumnWidth, showColumnWhenGrouped) {
return [].concat(toConsumableArray(grouping.map(function (columnGrouping) { return [].concat(toConsumableArray(grouping.map(function (columnGrouping) {
var groupedColumn = tableColumns.find(function (tableColumn) { var groupedColumn = columns.find(function (column) {
return tableColumn.type === TABLE_DATA_TYPE && tableColumn.column.name === columnGrouping.columnName; return column.name === columnGrouping.columnName;
}).column; });
return { return {
key: TABLE_GROUP_TYPE + '_' + groupedColumn.name, key: TABLE_GROUP_TYPE + '_' + groupedColumn.name,
type: TABLE_GROUP_TYPE, type: TABLE_GROUP_TYPE,
column: groupedColumn, column: groupedColumn,
width: groupIndentColumnWidth width: indentColumnWidth
}; };
})), toConsumableArray(tableColumnsWithDraftGrouping(tableColumns, draftGrouping, showColumnWhenGrouped))); })), toConsumableArray(tableColumnsWithDraftGrouping(tableColumns, grouping, draftGrouping, showColumnWhenGrouped)));
}; };
var tableRowsWithGrouping = function tableRowsWithGrouping(tableRows, isGroupRow) { var tableRowsWithGrouping = function tableRowsWithGrouping(tableRows, isGroupRow) {
@@ -1375,8 +1408,8 @@ var tableRowsWithHeading = function tableRowsWithHeading(headerRows) {
var TABLE_DETAIL_TYPE = 'detail'; var TABLE_DETAIL_TYPE = 'detail';
var isDetailRowExpanded = function isDetailRowExpanded(expandedRows, rowId) { var isDetailRowExpanded = function isDetailRowExpanded(expandedDetailRowIds, rowId) {
return expandedRows.indexOf(rowId) > -1; return expandedDetailRowIds.indexOf(rowId) > -1;
}; };
var isDetailToggleTableCell = function isDetailToggleTableCell(tableRow, tableColumn) { var isDetailToggleTableCell = function isDetailToggleTableCell(tableRow, tableColumn) {
return tableColumn.type === TABLE_DETAIL_TYPE && tableRow.type === TABLE_DATA_TYPE; return tableColumn.type === TABLE_DETAIL_TYPE && tableRow.type === TABLE_DATA_TYPE;
@@ -1385,26 +1418,26 @@ var isDetailTableRow = function isDetailTableRow(tableRow) {
return tableRow.type === TABLE_DETAIL_TYPE; return tableRow.type === TABLE_DETAIL_TYPE;
}; };
var setDetailRowExpanded = function setDetailRowExpanded(prevExpanded, _ref) { var toggleDetailRowExpanded = function toggleDetailRowExpanded(prevExpanded, _ref) {
var rowId = _ref.rowId, var rowId = _ref.rowId,
isExpanded = _ref.isExpanded; state = _ref.state;
var expandedRows = Array.from(prevExpanded); var expandedDetailRowIds = prevExpanded.slice();
var expandedIndex = expandedRows.indexOf(rowId); var expandedIndex = expandedDetailRowIds.indexOf(rowId);
var isRowExpanded = isExpanded !== undefined ? isExpanded : expandedIndex === -1; var rowState = state !== undefined ? state : expandedIndex === -1;
if (expandedIndex > -1 && !isRowExpanded) { if (expandedIndex > -1 && !rowState) {
expandedRows.splice(expandedIndex, 1); expandedDetailRowIds.splice(expandedIndex, 1);
} else if (expandedIndex === -1 && isRowExpanded) { } else if (expandedIndex === -1 && rowState) {
expandedRows.push(rowId); expandedDetailRowIds.push(rowId);
} }
return expandedRows; return expandedDetailRowIds;
}; };
var tableRowsWithExpandedDetail = function tableRowsWithExpandedDetail(tableRows, expandedRows, rowHeight) { var tableRowsWithExpandedDetail = function tableRowsWithExpandedDetail(tableRows, expandedDetailRowIds, rowHeight) {
var result = tableRows; var result = tableRows;
expandedRows.forEach(function (expandedRowId) { expandedDetailRowIds.forEach(function (expandedRowId) {
var rowIndex = result.findIndex(function (tableRow) { var rowIndex = result.findIndex(function (tableRow) {
return tableRow.type === TABLE_DATA_TYPE && tableRow.rowId === expandedRowId; return tableRow.type === TABLE_DATA_TYPE && tableRow.rowId === expandedRowId;
}); });
@@ -1426,8 +1459,8 @@ var tableRowsWithExpandedDetail = function tableRowsWithExpandedDetail(tableRows
return result; return result;
}; };
var tableColumnsWithDetail = function tableColumnsWithDetail(tableColumns, detailToggleCellWidth) { var tableColumnsWithDetail = function tableColumnsWithDetail(tableColumns, toggleColumnWidth) {
return [{ key: TABLE_DETAIL_TYPE, type: TABLE_DETAIL_TYPE, width: detailToggleCellWidth }].concat(toConsumableArray(tableColumns)); return [{ key: TABLE_DETAIL_TYPE, type: TABLE_DETAIL_TYPE, width: toggleColumnWidth }].concat(toConsumableArray(tableColumns));
}; };
var TABLE_SELECT_TYPE = 'select'; var TABLE_SELECT_TYPE = 'select';
@@ -1456,12 +1489,29 @@ var isDataTableRow = function isDataTableRow(tableRow) {
return tableRow.type === TABLE_DATA_TYPE; return tableRow.type === TABLE_DATA_TYPE;
}; };
var tableColumnsWithDataRows = function tableColumnsWithDataRows(columns) { var getColumnExtension = function getColumnExtension(columnExtensions, columnName) {
if (!columnExtensions) {
return {};
}
var columnExtension = columnExtensions.find(function (extension) {
return extension.columnName === columnName;
});
if (!columnExtension) {
return {};
}
return columnExtension;
};
var tableColumnsWithDataRows = function tableColumnsWithDataRows(columns, columnExtensions) {
return columns.map(function (column) { return columns.map(function (column) {
var name = column.name;
var columnExtension = getColumnExtension(columnExtensions, name);
return { return {
key: TABLE_DATA_TYPE + '_' + column.name, key: TABLE_DATA_TYPE + '_' + name,
type: TABLE_DATA_TYPE, type: TABLE_DATA_TYPE,
width: column.width, width: columnExtension.width,
align: columnExtension.align,
column: column column: column
}; };
}); });
@@ -1479,20 +1529,26 @@ var tableRowsWithDataRows = function tableRowsWithDataRows(rows, getRowId) {
}); });
}; };
var visibleTableColumns = function visibleTableColumns(tableColumns, hiddenColumns) { var visibleTableColumns = function visibleTableColumns(tableColumns, hiddenColumnNames) {
return tableColumns.filter(function (tableColumn) { return tableColumns.filter(function (tableColumn) {
return hiddenColumns.indexOf(tableColumn.column.name) === -1; return tableColumn.type !== TABLE_DATA_TYPE || hiddenColumnNames.indexOf(tableColumn.column.name) === -1;
}); });
}; };
var columnChooserItems = function columnChooserItems(columns, hiddenColumns) { var tableDataColumnsExist = function tableDataColumnsExist(tableColumns) {
return tableColumns.some(function (column) {
return column.type === TABLE_DATA_TYPE;
});
};
var columnChooserItems = function columnChooserItems(columns, hiddenColumnNames) {
return columns.map(function (column) { return columns.map(function (column) {
return { column: column, hidden: hiddenColumns.indexOf(column.name) !== -1 }; return { column: column, hidden: hiddenColumnNames.indexOf(column.name) !== -1 };
}); });
}; };
var toggleColumn = function toggleColumn(hiddenColumns, columnName) { var toggleColumn = function toggleColumn(hiddenColumnNames, columnName) {
return hiddenColumns.indexOf(columnName) === -1 ? [].concat(toConsumableArray(hiddenColumns), [columnName]) : hiddenColumns.filter(function (hiddenColumn) { return hiddenColumnNames.indexOf(columnName) === -1 ? [].concat(toConsumableArray(hiddenColumnNames), [columnName]) : hiddenColumnNames.filter(function (hiddenColumn) {
return hiddenColumn !== columnName; return hiddenColumn !== columnName;
}); });
}; };
@@ -1652,15 +1708,36 @@ var isOnTheSameLine = function isOnTheSameLine(geometry, y) {
return y >= geometry.top && y <= geometry.bottom; return y >= geometry.top && y <= geometry.bottom;
}; };
var getGroupCellTargetIndex = function getGroupCellTargetIndex(geometries, sourceIndex, _ref) { var rectToObject = function rectToObject(_ref) {
var x = _ref.x, var top = _ref.top,
y = _ref.y; right = _ref.right,
bottom = _ref.bottom,
left = _ref.left;
return {
top: top, right: right, bottom: bottom, left: left
};
};
var collapseGapsBetweenItems = function collapseGapsBetweenItems(geometries) {
return geometries.map(function (geometry, index) {
if (index !== geometries.length - 1 && geometry.top === geometries[index + 1].top) {
return _extends({}, geometry, {
right: geometries[index + 1].left
});
}
return geometry;
});
};
var getGroupCellTargetIndex = function getGroupCellTargetIndex(geometries, sourceIndex, _ref2) {
var x = _ref2.x,
y = _ref2.y;
if (geometries.length === 0) return 0; if (geometries.length === 0) return 0;
var targetGeometries = sourceIndex !== -1 ? getTargetColumnGeometries(geometries, sourceIndex) : geometries; var targetGeometries = sourceIndex !== -1 ? getTargetColumnGeometries(geometries, sourceIndex) : geometries.map(rectToObject);
var targetIndex = targetGeometries.findIndex(function (geometry, index) { var targetIndex = collapseGapsBetweenItems(targetGeometries).findIndex(function (geometry, index) {
var inVerticalBounds = isOnTheSameLine(geometry, y); var inVerticalBounds = isOnTheSameLine(geometry, y);
var inHorizontalBounds = x >= geometry.left && x <= geometry.right; var inHorizontalBounds = x >= geometry.left && x <= geometry.right;
var shouldGoFirst = index === 0 && x < geometry.left; var shouldGoFirst = index === 0 && x < geometry.left;
@@ -1692,5 +1769,5 @@ var getMessagesFormatter = function getMessagesFormatter(messages) {
}; };
}; };
export { getTableRowColumnsWithColSpan, getTableColumnGeometries, getTableTargetColumnIndex, getAnimations, filterActiveAnimations, evalAnimations, getGroupCellTargetIndex, getMessagesFormatter, rowIdGetter, cellValueGetter, setColumnSorting, getColumnSortingDirection, sortedRows, setColumnFilter, getColumnFilterConfig, filteredRows, groupByColumn, toggleExpandedGroups, draftGroupingChange, cancelGroupingChange, draftGrouping, groupRowChecker, groupRowLevelKeyGetter, groupedRows, expandedGroupRows, customGroupedRows, customGroupingRowIdGetter, groupingPanelItems, setCurrentPage, setPageSize, paginatedRows, rowsWithPageHeaders, pageCount, rowCount, firstRowOnPage, lastRowOnPage, setRowsSelection, getAvailableToSelect, getAvailableSelection, startEditRows, stopEditRows, addRow, changeAddedRow, cancelAddedRows, changeRow, cancelChanges, deleteRows, cancelDeletedRows, changedRowsByIds, addedRowsByIds, computedCreateRowChange, getRowChange, TABLE_REORDERING_TYPE, changeColumnOrder, orderedColumns, tableHeaderRowsWithReordering, draftOrder, tableColumnsWithWidths, changeTableColumnWidths, changeDraftTableColumnWidths, TABLE_EDIT_COMMAND_TYPE, isHeadingEditCommandsTableCell, isEditCommandsTableCell, tableColumnsWithEditing, TABLE_ADDED_TYPE, TABLE_EDIT_TYPE, isEditTableCell, isAddedTableRow, isEditTableRow, tableRowsWithEditing, TABLE_FILTER_TYPE, isFilterTableCell, isFilterTableRow, tableHeaderRowsWithFilter, TABLE_GROUP_TYPE, isGroupTableCell, isGroupIndentTableCell, isGroupTableRow, tableColumnsWithGrouping, tableRowsWithGrouping, TABLE_HEADING_TYPE, isHeadingTableCell, isHeadingTableRow, tableRowsWithHeading, TABLE_DETAIL_TYPE, isDetailRowExpanded, isDetailToggleTableCell, isDetailTableRow, setDetailRowExpanded, tableRowsWithExpandedDetail, tableColumnsWithDetail, TABLE_SELECT_TYPE, isSelectTableCell, isSelectAllTableCell, tableColumnsWithSelection, TABLE_DATA_TYPE, TABLE_NODATA_TYPE, isNoDataTableRow, isDataTableCell, isHeaderStubTableCell, isDataTableRow, tableColumnsWithDataRows, tableRowsWithDataRows, visibleTableColumns, columnChooserItems, toggleColumn }; export { getColumnExtension, getTableRowColumnsWithColSpan, getTableColumnGeometries, getTableTargetColumnIndex, getAnimations, filterActiveAnimations, evalAnimations, getGroupCellTargetIndex, getMessagesFormatter, rowIdGetter, cellValueGetter, changeColumnSorting, getColumnSortingDirection, sortedRows, changeColumnFilter, getColumnFilterConfig, filteredRows, GROUP_KEY_SEPARATOR, changeColumnGrouping, toggleExpandedGroups, draftColumnGrouping, cancelColumnGroupingDraft, groupRowChecker, groupRowLevelKeyGetter, groupedRows, expandedGroupRows, customGroupedRows, customGroupingRowIdGetter, groupingPanelItems, setCurrentPage, setPageSize, paginatedRows, rowsWithPageHeaders, pageCount, rowCount, firstRowOnPage, lastRowOnPage, toggleSelection, rowsWithAvailableToSelect, someSelected, allSelected, unwrapSelectedRows, startEditRows, stopEditRows, addRow, changeAddedRow, cancelAddedRows, changeRow, cancelChanges, deleteRows, cancelDeletedRows, changedRowsByIds, addedRowsByIds, createRowChangeGetter, getRowChange, TABLE_REORDERING_TYPE, changeColumnOrder, orderedColumns, tableHeaderRowsWithReordering, draftOrder, tableColumnsWithWidths, changeTableColumnWidth, draftTableColumnWidth, cancelTableColumnWidthDraft, TABLE_EDIT_COMMAND_TYPE, isHeadingEditCommandsTableCell, isEditCommandsTableCell, tableColumnsWithEditing, TABLE_ADDED_TYPE, TABLE_EDIT_TYPE, isEditTableCell, isAddedTableRow, isEditTableRow, tableRowsWithEditing, TABLE_FILTER_TYPE, isFilterTableCell, isFilterTableRow, tableHeaderRowsWithFilter, TABLE_GROUP_TYPE, isGroupTableCell, isGroupIndentTableCell, isGroupTableRow, tableColumnsWithGrouping, tableRowsWithGrouping, TABLE_HEADING_TYPE, isHeadingTableCell, isHeadingTableRow, tableRowsWithHeading, TABLE_DETAIL_TYPE, isDetailRowExpanded, isDetailToggleTableCell, isDetailTableRow, toggleDetailRowExpanded, tableRowsWithExpandedDetail, tableColumnsWithDetail, TABLE_SELECT_TYPE, isSelectTableCell, isSelectAllTableCell, tableColumnsWithSelection, TABLE_DATA_TYPE, TABLE_NODATA_TYPE, isNoDataTableRow, isDataTableCell, isHeaderStubTableCell, isDataTableRow, tableColumnsWithDataRows, tableRowsWithDataRows, visibleTableColumns, tableDataColumnsExist, columnChooserItems, toggleColumn };
//# sourceMappingURL=dx-grid-core.es.js.map //# sourceMappingURL=dx-grid-core.es.js.map

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
/** /**
* Bundle of @devexpress/dx-grid-core * Bundle of @devexpress/dx-grid-core
* Generated: 2017-11-10 * Generated: 2018-03-02
* Version: 1.0.0-beta.1 * Version: 1.0.3
* License: https://js.devexpress.com/Licensing * License: https://js.devexpress.com/Licensing
*/ */
@@ -23,10 +23,12 @@ var rowIdGetter = function rowIdGetter(getRowId, rows) {
return getRowId; return getRowId;
}; };
var cellValueGetter = function cellValueGetter(getCellValue, columns) { var defaultGetCellValue = function defaultGetCellValue(row, columnName) {
if (getCellValue) { return row[columnName];
return getCellValue; };
} var cellValueGetter = function cellValueGetter() {
var getCellValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultGetCellValue;
var columns = arguments[1];
var useFastAccessor = true; var useFastAccessor = true;
var map = columns.reduce(function (acc, column) { var map = columns.reduce(function (acc, column) {
@@ -37,28 +39,29 @@ var cellValueGetter = function cellValueGetter(getCellValue, columns) {
return acc; return acc;
}, {}); }, {});
return useFastAccessor ? function (row, columnName) { if (useFastAccessor) {
return row[columnName]; return getCellValue;
} : function (row, columnName) { }
return map[columnName] ? map[columnName](row, columnName) : row[columnName];
return function (row, columnName) {
return map[columnName] ? map[columnName](row, columnName) : getCellValue(row, columnName);
}; };
}; };
var setColumnSorting = function setColumnSorting(state, _ref) { var changeColumnSorting = function changeColumnSorting(state, _ref) {
var columnName = _ref.columnName, var columnName = _ref.columnName,
direction = _ref.direction, direction = _ref.direction,
keepOther = _ref.keepOther, keepOther = _ref.keepOther,
cancel = _ref.cancel,
sortIndex = _ref.sortIndex; sortIndex = _ref.sortIndex;
var sorting = state.sorting; var sorting = state.sorting;
var nextSorting = []; var nextSorting = [];
if (keepOther === true) { if (keepOther === true) {
nextSorting = Array.from(sorting).slice(); nextSorting = sorting.slice();
} }
if (Array.isArray(keepOther)) { if (Array.isArray(keepOther)) {
nextSorting = Array.from(sorting).filter(function (columnSorting) { nextSorting = sorting.slice().filter(function (columnSorting) {
return keepOther.indexOf(columnSorting.columnName) > -1; return keepOther.indexOf(columnSorting.columnName) > -1;
}); });
} }
@@ -76,7 +79,7 @@ var setColumnSorting = function setColumnSorting(state, _ref) {
nextSorting.splice(columnSortingIndex, 1); nextSorting.splice(columnSortingIndex, 1);
} }
if (!cancel) { if (direction !== null) {
var newIndexFallback = columnSortingIndex > -1 ? columnSortingIndex : nextSorting.length; var newIndexFallback = columnSortingIndex > -1 ? columnSortingIndex : nextSorting.length;
var newIndex = sortIndex !== undefined ? sortIndex : newIndexFallback; var newIndex = sortIndex !== undefined ? sortIndex : newIndexFallback;
nextSorting.splice(newIndex, 0, newColumnSorting); nextSorting.splice(newIndex, 0, newColumnSorting);
@@ -450,7 +453,7 @@ var defaultCompare = function defaultCompare(a, b) {
}; };
var createCompare = function createCompare(sorting, getColumnCompare, getComparableValue) { var createCompare = function createCompare(sorting, getColumnCompare, getComparableValue) {
return Array.from(sorting).reverse().reduce(function (prevCompare, columnSorting) { return sorting.slice().reverse().reduce(function (prevCompare, columnSorting) {
var columnName = columnSorting.columnName; var columnName = columnSorting.columnName;
var inverse = columnSorting.direction === 'desc'; var inverse = columnSorting.direction === 'desc';
@@ -499,7 +502,7 @@ var sortedRows = function sortedRows(rows, sorting, getCellValue, getColumnCompa
if (!getRowLevelKey) { if (!getRowLevelKey) {
var _compare = createCompare(sorting, getColumnCompare, getCellValue); var _compare = createCompare(sorting, getColumnCompare, getCellValue);
return mergeSort(Array.from(rows), _compare); return mergeSort(rows.slice(), _compare);
} }
var compare = createCompare(sorting, getColumnCompare, function (row, columnName) { var compare = createCompare(sorting, getColumnCompare, function (row, columnName) {
@@ -514,14 +517,14 @@ var sortedRows = function sortedRows(rows, sorting, getCellValue, getColumnCompa
return sortHierarchicalRows(rows, compare, getRowLevelKey); return sortHierarchicalRows(rows, compare, getRowLevelKey);
}; };
var setColumnFilter = function setColumnFilter(filters, _ref) { var changeColumnFilter = function changeColumnFilter(filters, _ref) {
var columnName = _ref.columnName, var columnName = _ref.columnName,
config = _ref.config; config = _ref.config;
var filterIndex = filters.findIndex(function (f) { var filterIndex = filters.findIndex(function (f) {
return f.columnName === columnName; return f.columnName === columnName;
}); });
var nextState = Array.from(filters); var nextState = filters.slice();
if (config) { if (config) {
var filter = _extends({ columnName: columnName }, config); var filter = _extends({ columnName: columnName }, config);
@@ -628,56 +631,67 @@ var filteredRows = function filteredRows(rows, filters, getCellValue, getColumnP
var GROUP_KEY_SEPARATOR = '|'; var GROUP_KEY_SEPARATOR = '|';
var groupByColumn = function groupByColumn(state, _ref) { var applyColumnGrouping = function applyColumnGrouping(grouping, _ref) {
var columnName = _ref.columnName, var columnName = _ref.columnName,
groupIndex = _ref.groupIndex; groupIndex = _ref.groupIndex;
var grouping = Array.from(state.grouping); var nextGrouping = grouping.slice();
var groupingIndex = grouping.findIndex(function (g) { var groupingIndex = nextGrouping.findIndex(function (g) {
return g.columnName === columnName; return g.columnName === columnName;
}); });
var targetIndex = groupIndex; var targetIndex = groupIndex;
if (groupingIndex > -1) { if (groupingIndex > -1) {
grouping.splice(groupingIndex, 1); nextGrouping.splice(groupingIndex, 1);
} else if (groupIndex === undefined) { } else if (groupIndex === undefined) {
targetIndex = grouping.length; targetIndex = nextGrouping.length;
} }
if (targetIndex > -1) { if (targetIndex > -1) {
grouping.splice(targetIndex, 0, { nextGrouping.splice(targetIndex, 0, {
columnName: columnName columnName: columnName
}); });
} }
var ungroupedColumnIndex = state.grouping.findIndex(function (group, index) { return nextGrouping;
return !grouping[index] || group.columnName !== grouping[index].columnName; };
var changeColumnGrouping = function changeColumnGrouping(_ref2, _ref3) {
var grouping = _ref2.grouping,
expandedGroups = _ref2.expandedGroups;
var columnName = _ref3.columnName,
groupIndex = _ref3.groupIndex;
var nextGrouping = applyColumnGrouping(grouping, { columnName: columnName, groupIndex: groupIndex });
var ungroupedColumnIndex = grouping.findIndex(function (group, index) {
return !nextGrouping[index] || group.columnName !== nextGrouping[index].columnName;
}); });
if (ungroupedColumnIndex === -1) { if (ungroupedColumnIndex === -1) {
return { return {
grouping: grouping grouping: nextGrouping
}; };
} }
var filteredExpandedGroups = state.expandedGroups.filter(function (group) { var filteredExpandedGroups = expandedGroups.filter(function (group) {
return group.split(GROUP_KEY_SEPARATOR).length <= ungroupedColumnIndex; return group.split(GROUP_KEY_SEPARATOR).length <= ungroupedColumnIndex;
}); });
if (filteredExpandedGroups.length === state.expandedGroups.length) { if (filteredExpandedGroups.length === expandedGroups.length) {
return { return {
grouping: grouping grouping: nextGrouping
}; };
} }
return { return {
grouping: grouping, grouping: nextGrouping,
expandedGroups: filteredExpandedGroups expandedGroups: filteredExpandedGroups
}; };
}; };
var toggleExpandedGroups = function toggleExpandedGroups(state, _ref2) { var toggleExpandedGroups = function toggleExpandedGroups(state, _ref4) {
var groupKey = _ref2.groupKey; var groupKey = _ref4.groupKey;
var expandedGroups = Array.from(state.expandedGroups); var expandedGroups = state.expandedGroups.slice();
var groupKeyIndex = expandedGroups.indexOf(groupKey); var groupKeyIndex = expandedGroups.indexOf(groupKey);
if (groupKeyIndex > -1) { if (groupKeyIndex > -1) {
@@ -691,40 +705,20 @@ var toggleExpandedGroups = function toggleExpandedGroups(state, _ref2) {
}; };
}; };
var draftGroupingChange = function draftGroupingChange(state, _ref3) { var draftColumnGrouping = function draftColumnGrouping(_ref5, _ref6) {
var columnName = _ref3.columnName, var grouping = _ref5.grouping,
groupIndex = _ref3.groupIndex; draftGrouping = _ref5.draftGrouping;
return { groupingChange: { columnName: columnName, groupIndex: groupIndex } }; var columnName = _ref6.columnName,
groupIndex = _ref6.groupIndex;
return {
draftGrouping: applyColumnGrouping(draftGrouping || grouping, { columnName: columnName, groupIndex: groupIndex })
};
}; };
var cancelGroupingChange = function cancelGroupingChange() { var cancelColumnGroupingDraft = function cancelColumnGroupingDraft() {
return { groupingChange: null }; return {
}; draftGrouping: null
};
var draftGrouping = function draftGrouping(grouping, groupingChange) {
if (!groupingChange) return grouping;
var columnName = groupingChange.columnName,
groupIndex = groupingChange.groupIndex;
var result = Array.from(grouping);
if (groupIndex !== -1) {
result = result.filter(function (g) {
return g.columnName !== columnName;
});
result.splice(groupIndex, 0, {
columnName: columnName,
draft: true,
mode: grouping.length > result.length ? 'reorder' : 'add'
});
} else {
result = result.map(function (g) {
return g.columnName === columnName ? { columnName: columnName, draft: true, mode: 'remove' } : g;
});
}
return result;
}; };
var GRID_GROUP_TYPE = 'group'; var GRID_GROUP_TYPE = 'group';
@@ -739,26 +733,26 @@ var groupRowLevelKeyGetter = function groupRowLevelKeyGetter(row) {
return row[GRID_GROUP_LEVEL_KEY]; return row[GRID_GROUP_LEVEL_KEY];
}; };
var defaultColumnIdentity = function defaultColumnIdentity(value) { var defaultColumnCriteria = function defaultColumnCriteria(value) {
return { return {
key: String(value), key: String(value),
value: value value: value
}; };
}; };
var groupedRows = function groupedRows(rows, grouping, getCellValue, getColumnIdentity) { var groupedRows = function groupedRows(rows, grouping, getCellValue, getColumnCriteria) {
var keyPrefix = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : ''; var keyPrefix = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
if (!grouping.length) return rows; if (!grouping.length) return rows;
var columnName = grouping[0].columnName; var columnName = grouping[0].columnName;
var groupIdentity = getColumnIdentity && getColumnIdentity(columnName) || defaultColumnIdentity; var groupCriteria = getColumnCriteria && getColumnCriteria(columnName) || defaultColumnCriteria;
var groups = rows.reduce(function (acc, row) { var groups = rows.reduce(function (acc, row) {
var _groupIdentity = groupIdentity(getCellValue(row, columnName), row), var _groupCriteria = groupCriteria(getCellValue(row, columnName), row),
key = _groupIdentity.key, key = _groupCriteria.key,
_groupIdentity$value = _groupIdentity.value, _groupCriteria$value = _groupCriteria.value,
value = _groupIdentity$value === undefined ? key : _groupIdentity$value; value = _groupCriteria$value === undefined ? key : _groupCriteria$value;
var sameKeyItems = acc.get(key); var sameKeyItems = acc.get(key);
@@ -782,7 +776,7 @@ var groupedRows = function groupedRows(rows, grouping, getCellValue, getColumnId
var compoundKey = '' + keyPrefix + key; var compoundKey = '' + keyPrefix + key;
acc.push((_acc$push = {}, defineProperty(_acc$push, GRID_GROUP_CHECK, true), defineProperty(_acc$push, GRID_GROUP_LEVEL_KEY, GRID_GROUP_TYPE + '_' + groupedBy), defineProperty(_acc$push, 'groupedBy', groupedBy), defineProperty(_acc$push, 'compoundKey', compoundKey), defineProperty(_acc$push, 'key', key), defineProperty(_acc$push, 'value', value), _acc$push)); acc.push((_acc$push = {}, defineProperty(_acc$push, GRID_GROUP_CHECK, true), defineProperty(_acc$push, GRID_GROUP_LEVEL_KEY, GRID_GROUP_TYPE + '_' + groupedBy), defineProperty(_acc$push, 'groupedBy', groupedBy), defineProperty(_acc$push, 'compoundKey', compoundKey), defineProperty(_acc$push, 'key', key), defineProperty(_acc$push, 'value', value), _acc$push));
acc.push.apply(acc, toConsumableArray(groupedRows(items, nestedGrouping, getCellValue, getColumnIdentity, '' + compoundKey + GROUP_KEY_SEPARATOR))); acc.push.apply(acc, toConsumableArray(groupedRows(items, nestedGrouping, getCellValue, getColumnCriteria, '' + compoundKey + GROUP_KEY_SEPARATOR)));
return acc; return acc;
}, []); }, []);
}; };
@@ -793,6 +787,7 @@ var expandedGroupRows = function expandedGroupRows(rows, grouping, expandedGroup
var groupingColumnNames = grouping.map(function (columnGrouping) { var groupingColumnNames = grouping.map(function (columnGrouping) {
return columnGrouping.columnName; return columnGrouping.columnName;
}); });
var expandedGroupsSet = new Set(expandedGroups);
var currentGroupExpanded = true; var currentGroupExpanded = true;
var currentGroupLevel = 0; var currentGroupLevel = 0;
@@ -811,7 +806,7 @@ var expandedGroupRows = function expandedGroupRows(rows, grouping, expandedGroup
return acc; return acc;
} }
currentGroupExpanded = expandedGroups.has(row.compoundKey); currentGroupExpanded = expandedGroupsSet.has(row.compoundKey);
currentGroupLevel = groupLevel; currentGroupLevel = groupLevel;
if (currentGroupExpanded) { if (currentGroupExpanded) {
@@ -868,19 +863,34 @@ var customGroupingRowIdGetter = function customGroupingRowIdGetter(getRowId, row
}; };
}; };
var groupingPanelItems = function groupingPanelItems(columns, grouping) { var groupingPanelItems = function groupingPanelItems(columns, grouping, draftGrouping) {
return grouping.map(function (_ref) { var items = draftGrouping.map(function (_ref) {
var columnName = _ref.columnName, var columnName = _ref.columnName;
draft = _ref.draft;
var column = columns.find(function (c) {
return c.name === columnName;
});
return { return {
column: column, column: columns.find(function (c) {
draft: draft return c.name === columnName;
}),
draft: !grouping.some(function (columnGrouping) {
return columnGrouping.columnName === columnName;
})
}; };
}); });
grouping.forEach(function (_ref2, index) {
var columnName = _ref2.columnName;
if (draftGrouping.some(function (columnGrouping) {
return columnGrouping.columnName === columnName;
})) return;
items.splice(index, 0, {
column: columns.find(function (c) {
return c.name === columnName;
}),
draft: true
});
});
return items;
}; };
var setCurrentPage = function setCurrentPage(prevPage, page) { var setCurrentPage = function setCurrentPage(prevPage, page) {
@@ -959,47 +969,21 @@ var lastRowOnPage = function lastRowOnPage(currentPage, pageSize, totalRowCount)
return result; return result;
}; };
var setRowSelection = function setRowSelection(selection, _ref) { var toggleSelection = function toggleSelection(selection, _ref) {
var rowId = _ref.rowId, var rowIds = _ref.rowIds,
selected = _ref.selected; state = _ref.state;
var selectedRows = Array.from(selection);
var selectedIndex = selectedRows.indexOf(rowId);
var isRowSelected = selected;
if (isRowSelected === undefined) {
isRowSelected = selectedIndex === -1;
}
if (selectedIndex > -1 && !isRowSelected) {
selectedRows.splice(selectedIndex, 1);
} else if (selectedIndex === -1 && isRowSelected) {
selectedRows.push(rowId);
}
return selectedRows;
};
var setRowsSelection = function setRowsSelection(selection, _ref2) {
var rowIds = _ref2.rowIds,
selected = _ref2.selected;
if (rowIds.length === 1) {
return setRowSelection(selection, { rowId: rowIds[0], selected: selected });
}
var rowIdsSet = new Set(rowIds); var rowIdsSet = new Set(rowIds);
var isRowsSelected = selected; var rowsState = state;
if (isRowsSelected === undefined) { if (rowsState === undefined) {
var availableSelection = selection.filter(function (rowId) { var availableSelection = selection.filter(function (rowId) {
return rowIdsSet.has(rowId); return rowIdsSet.has(rowId);
}); });
isRowsSelected = availableSelection.length !== rowIdsSet.size; rowsState = availableSelection.length !== rowIdsSet.size;
} }
if (isRowsSelected) { if (rowsState) {
var selectionSet = new Set(selection); var selectionSet = new Set(selection);
return [].concat(toConsumableArray(selection), toConsumableArray(rowIds.filter(function (rowId) { return [].concat(toConsumableArray(selection), toConsumableArray(rowIds.filter(function (rowId) {
return !selectionSet.has(rowId); return !selectionSet.has(rowId);
@@ -1011,41 +995,63 @@ var setRowsSelection = function setRowsSelection(selection, _ref2) {
}); });
}; };
var getAvailableToSelect = function getAvailableToSelect(rows, getRowId, isGroupRow) { var rowsWithAvailableToSelect = function rowsWithAvailableToSelect(rows, getRowId, isGroupRow) {
var dataRows = rows; var dataRows = rows;
if (isGroupRow) { if (isGroupRow) {
dataRows = dataRows.filter(function (row) { dataRows = dataRows.filter(function (row) {
return !isGroupRow(row); return !isGroupRow(row);
}); });
} }
return dataRows.map(function (row) { return { rows: rows, availableToSelect: dataRows.map(function (row) {
return getRowId(row); return getRowId(row);
}) };
};
var someSelected = function someSelected(_ref, selection) {
var availableToSelect = _ref.availableToSelect;
var selectionSet = new Set(selection);
return availableToSelect.length !== 0 && selectionSet.size !== 0 && availableToSelect.some(function (elem) {
return selectionSet.has(elem);
}) && availableToSelect.some(function (elem) {
return !selectionSet.has(elem);
}); });
}; };
var getAvailableSelection = function getAvailableSelection(selection, availableToSelect) { var allSelected = function allSelected(_ref2, selection) {
var availableToSelectSet = new Set(availableToSelect); var availableToSelect = _ref2.availableToSelect;
return selection.filter(function (selected) {
return availableToSelectSet.has(selected); var selectionSet = new Set(selection);
return selectionSet.size !== 0 && availableToSelect.length !== 0 && !availableToSelect.some(function (elem) {
return !selectionSet.has(elem);
}); });
}; };
var startEditRows = function startEditRows(prevEditingRows, _ref) { var unwrapSelectedRows = function unwrapSelectedRows(_ref3) {
var rows = _ref3.rows;
return rows;
};
var startEditRows = function startEditRows(prevEditingRowIds, _ref) {
var rowIds = _ref.rowIds; var rowIds = _ref.rowIds;
return [].concat(toConsumableArray(prevEditingRows), toConsumableArray(rowIds)); return [].concat(toConsumableArray(prevEditingRowIds), toConsumableArray(rowIds));
}; };
var stopEditRows = function stopEditRows(prevEditingRows, _ref2) { var stopEditRows = function stopEditRows(prevEditingRowIds, _ref2) {
var rowIds = _ref2.rowIds; var rowIds = _ref2.rowIds;
var rowIdSet = new Set(rowIds); var rowIdSet = new Set(rowIds);
return prevEditingRows.filter(function (id) { return prevEditingRowIds.filter(function (id) {
return !rowIdSet.has(id); return !rowIdSet.has(id);
}); });
}; };
var addRow = function addRow(addedRows, _ref3) { var addRow = function addRow(addedRows) {
var row = _ref3.row; var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { row: {} },
row = _ref3.row;
return [].concat(toConsumableArray(addedRows), [row]); return [].concat(toConsumableArray(addedRows), [row]);
}; };
@@ -1053,7 +1059,7 @@ var changeAddedRow = function changeAddedRow(addedRows, _ref4) {
var rowId = _ref4.rowId, var rowId = _ref4.rowId,
change = _ref4.change; change = _ref4.change;
var result = Array.from(addedRows); var result = addedRows.slice();
result[rowId] = _extends({}, result[rowId], change); result[rowId] = _extends({}, result[rowId], change);
return result; return result;
}; };
@@ -1071,34 +1077,34 @@ var cancelAddedRows = function cancelAddedRows(addedRows, _ref5) {
return result; return result;
}; };
var changeRow = function changeRow(prevChangedRows, _ref6) { var changeRow = function changeRow(prevRowChanges, _ref6) {
var rowId = _ref6.rowId, var rowId = _ref6.rowId,
change = _ref6.change; change = _ref6.change;
var prevChange = prevChangedRows[rowId] || {}; var prevChange = prevRowChanges[rowId] || {};
return _extends({}, prevChangedRows, defineProperty({}, rowId, _extends({}, prevChange, change))); return _extends({}, prevRowChanges, defineProperty({}, rowId, _extends({}, prevChange, change)));
}; };
var cancelChanges = function cancelChanges(prevChangedRows, _ref7) { var cancelChanges = function cancelChanges(prevRowChanges, _ref7) {
var rowIds = _ref7.rowIds; var rowIds = _ref7.rowIds;
var result = _extends({}, prevChangedRows); var result = _extends({}, prevRowChanges);
rowIds.forEach(function (rowId) { rowIds.forEach(function (rowId) {
delete result[rowId]; delete result[rowId];
}); });
return result; return result;
}; };
var deleteRows = function deleteRows(deletedRows, _ref8) { var deleteRows = function deleteRows(deletedRowIds, _ref8) {
var rowIds = _ref8.rowIds; var rowIds = _ref8.rowIds;
return [].concat(toConsumableArray(deletedRows), toConsumableArray(rowIds)); return [].concat(toConsumableArray(deletedRowIds), toConsumableArray(rowIds));
}; };
var cancelDeletedRows = function cancelDeletedRows(deletedRows, _ref9) { var cancelDeletedRows = function cancelDeletedRows(deletedRowIds, _ref9) {
var rowIds = _ref9.rowIds; var rowIds = _ref9.rowIds;
var rowIdSet = new Set(rowIds); var rowIdSet = new Set(rowIds);
return deletedRows.filter(function (rowId) { return deletedRowIds.filter(function (rowId) {
return !rowIdSet.has(rowId); return !rowIdSet.has(rowId);
}); });
}; };
@@ -1122,21 +1128,30 @@ var addedRowsByIds = function addedRowsByIds(addedRows, rowIds) {
return result; return result;
}; };
var computedCreateRowChange = function computedCreateRowChange(columns) { var defaultCreateRowChange = function defaultCreateRowChange(row, value, columnName) {
var map = columns.reduce(function (acc, column) { return defineProperty({}, columnName, value);
if (column.createRowChange) { };
acc[column.name] = column.createRowChange; var createRowChangeGetter = function createRowChangeGetter() {
var createRowChange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultCreateRowChange;
var columnExtensions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var map = columnExtensions.reduce(function (acc, columnExtension) {
if (columnExtension.createRowChange) {
acc[columnExtension.columnName] = columnExtension.createRowChange;
} }
return acc; return acc;
}, {}); }, {});
return function (row, columnName, value) { return function (row, value, columnName) {
return map[columnName] ? map[columnName](row, value, columnName) : defineProperty({}, columnName, value); if (map[columnName]) {
return map[columnName](row, value, columnName);
}
return createRowChange(row, value, columnName);
}; };
}; };
var getRowChange = function getRowChange(changedRows, rowId) { var getRowChange = function getRowChange(rowChanges, rowId) {
return changedRows[rowId] || {}; return rowChanges[rowId] || {};
}; };
var TABLE_REORDERING_TYPE = 'reordering'; var TABLE_REORDERING_TYPE = 'reordering';
@@ -1147,7 +1162,7 @@ var changeColumnOrder = function changeColumnOrder(order, _ref) {
var sourceColumnIndex = order.indexOf(sourceColumnName); var sourceColumnIndex = order.indexOf(sourceColumnName);
var targetColumnIndex = order.indexOf(targetColumnName); var targetColumnIndex = order.indexOf(targetColumnName);
var newOrder = Array.from(order); var newOrder = order.slice();
newOrder.splice(sourceColumnIndex, 1); newOrder.splice(sourceColumnIndex, 1);
newOrder.splice(targetColumnIndex, 0, sourceColumnName); newOrder.splice(targetColumnIndex, 0, sourceColumnName);
@@ -1158,7 +1173,7 @@ var TABLE_DATA_TYPE = 'data';
var TABLE_NODATA_TYPE = 'nodata'; var TABLE_NODATA_TYPE = 'nodata';
var orderedColumns = function orderedColumns(tableColumns, order) { var orderedColumns = function orderedColumns(tableColumns, order) {
var result = Array.from(tableColumns); var result = tableColumns.slice();
result.sort(function (a, b) { result.sort(function (a, b) {
if (a.type !== TABLE_DATA_TYPE || b.type !== TABLE_DATA_TYPE) return 0; if (a.type !== TABLE_DATA_TYPE || b.type !== TABLE_DATA_TYPE) return 0;
@@ -1198,7 +1213,11 @@ var tableColumnsWithWidths = function tableColumnsWithWidths(tableColumns, colum
return tableColumns.reduce(function (acc, tableColumn) { return tableColumns.reduce(function (acc, tableColumn) {
if (tableColumn.type === 'data') { if (tableColumn.type === 'data') {
var columnName = tableColumn.column.name; var columnName = tableColumn.column.name;
var width = draftColumnWidths[columnName] || columnWidths[columnName]; var isCurrentColumn = function isCurrentColumn(elem) {
return elem.columnName === columnName;
};
var column = draftColumnWidths.find(isCurrentColumn) || columnWidths.find(isCurrentColumn);
var width = column && column.width;
if (width === undefined) { if (width === undefined) {
throw new Error(UNSET_COLUMN_WIDTH_ERROR.replace('$1', columnName)); throw new Error(UNSET_COLUMN_WIDTH_ERROR.replace('$1', columnName));
} }
@@ -1212,36 +1231,43 @@ var tableColumnsWithWidths = function tableColumnsWithWidths(tableColumns, colum
var MIN_SIZE = 40; var MIN_SIZE = 40;
var changeTableColumnWidths = function changeTableColumnWidths(state, _ref) { var changeTableColumnWidth = function changeTableColumnWidth(state, _ref) {
var shifts = _ref.shifts; var columnName = _ref.columnName,
shift = _ref.shift;
var columnWidths = state.columnWidths; var columnWidths = state.columnWidths;
var updatedColumnWidths = Object.keys(shifts).reduce(function (acc, columnName) { var nextColumnWidth = columnWidths.slice();
var size = Math.max(MIN_SIZE, columnWidths[columnName] + shifts[columnName]); var index = nextColumnWidth.findIndex(function (elem) {
return Object.assign(acc, defineProperty({}, columnName, size)); return elem.columnName === columnName;
}, {});
return _extends({}, state, {
columnWidths: _extends({}, columnWidths, updatedColumnWidths),
draftColumnWidths: {}
}); });
var updatedColumn = nextColumnWidth[index];
var size = Math.max(MIN_SIZE, updatedColumn.width + shift);
nextColumnWidth.splice(index, 1, { columnName: columnName, width: size });
return {
columnWidths: nextColumnWidth
};
}; };
var changeDraftTableColumnWidths = function changeDraftTableColumnWidths(state, _ref2) { var draftTableColumnWidth = function draftTableColumnWidth(state, _ref2) {
var shifts = _ref2.shifts; var columnName = _ref2.columnName,
var columnWidths = state.columnWidths, shift = _ref2.shift;
draftColumnWidths = state.draftColumnWidths; var columnWidths = state.columnWidths;
var updatedDraftColumnWidths = Object.keys(shifts).reduce(function (acc, columnName) { var updatedColumn = columnWidths.find(function (elem) {
if (shifts[columnName] === null) { return elem.columnName === columnName;
delete acc[columnName];
return acc;
}
var size = Math.max(MIN_SIZE, columnWidths[columnName] + shifts[columnName]);
return Object.assign(acc, defineProperty({}, columnName, size));
}, Object.assign({}, draftColumnWidths));
return _extends({}, state, {
draftColumnWidths: updatedDraftColumnWidths
}); });
var size = Math.max(MIN_SIZE, updatedColumn.width + shift);
return {
draftColumnWidths: [{ columnName: updatedColumn.columnName, width: size }]
};
};
var cancelTableColumnWidthDraft = function cancelTableColumnWidthDraft() {
return {
draftColumnWidths: []
};
}; };
var TABLE_EDIT_COMMAND_TYPE = 'editCommand'; var TABLE_EDIT_COMMAND_TYPE = 'editCommand';
@@ -1272,8 +1298,8 @@ var isEditTableRow = function isEditTableRow(tableRow) {
return tableRow.type === TABLE_EDIT_TYPE; return tableRow.type === TABLE_EDIT_TYPE;
}; };
var tableRowsWithEditing = function tableRowsWithEditing(tableRows, editingRows, addedRows, rowHeight) { var tableRowsWithEditing = function tableRowsWithEditing(tableRows, editingRowIds, addedRows, rowHeight) {
var rowIds = new Set(editingRows); var rowIds = new Set(editingRowIds);
var editedTableRows = tableRows.map(function (tableRow) { var editedTableRows = tableRows.map(function (tableRow) {
return tableRow.type === TABLE_DATA_TYPE && rowIds.has(tableRow.rowId) ? _extends({}, tableRow, { return tableRow.type === TABLE_DATA_TYPE && rowIds.has(tableRow.rowId) ? _extends({}, tableRow, {
type: TABLE_EDIT_TYPE, type: TABLE_EDIT_TYPE,
@@ -1319,37 +1345,44 @@ var isGroupTableRow = function isGroupTableRow(tableRow) {
return tableRow.type === TABLE_GROUP_TYPE; return tableRow.type === TABLE_GROUP_TYPE;
}; };
var tableColumnsWithDraftGrouping = function tableColumnsWithDraftGrouping(tableColumns, draftGrouping, showColumnWhenGrouped) { var tableColumnsWithDraftGrouping = function tableColumnsWithDraftGrouping(tableColumns, grouping, draftGrouping, showColumnWhenGrouped) {
return tableColumns.reduce(function (acc, tableColumn) { return tableColumns.reduce(function (acc, tableColumn) {
var isDataColumn = tableColumn.type === TABLE_DATA_TYPE; if (tableColumn.type !== TABLE_DATA_TYPE) {
var tableColumnName = isDataColumn ? tableColumn.column.name : ''; acc.push(tableColumn);
var columnDraftGrouping = draftGrouping.find(function (grouping) { return acc;
return grouping.columnName === tableColumnName; }
var columnName = tableColumn.column.name;
var columnGroupingExists = grouping.some(function (columnGrouping) {
return columnGrouping.columnName === columnName;
});
var columnDraftGroupingExists = draftGrouping.some(function (columnGrouping) {
return columnGrouping.columnName === columnName;
}); });
if (!columnDraftGrouping || showColumnWhenGrouped(tableColumnName)) { if (!columnGroupingExists && !columnDraftGroupingExists || showColumnWhenGrouped(columnName)) {
return [].concat(toConsumableArray(acc), [tableColumn]); acc.push(tableColumn);
} else if (columnDraftGrouping.mode === 'remove' || columnDraftGrouping.mode === 'add') { } else if (!columnGroupingExists && columnDraftGroupingExists || columnGroupingExists && !columnDraftGroupingExists) {
return [].concat(toConsumableArray(acc), [_extends({}, tableColumn, { acc.push(_extends({}, tableColumn, {
draft: true draft: true
})]); }));
} }
return acc; return acc;
}, []); }, []);
}; };
var tableColumnsWithGrouping = function tableColumnsWithGrouping(tableColumns, grouping, draftGrouping, groupIndentColumnWidth, showColumnWhenGrouped) { var tableColumnsWithGrouping = function tableColumnsWithGrouping(columns, tableColumns, grouping, draftGrouping, indentColumnWidth, showColumnWhenGrouped) {
return [].concat(toConsumableArray(grouping.map(function (columnGrouping) { return [].concat(toConsumableArray(grouping.map(function (columnGrouping) {
var groupedColumn = tableColumns.find(function (tableColumn) { var groupedColumn = columns.find(function (column) {
return tableColumn.type === TABLE_DATA_TYPE && tableColumn.column.name === columnGrouping.columnName; return column.name === columnGrouping.columnName;
}).column; });
return { return {
key: TABLE_GROUP_TYPE + '_' + groupedColumn.name, key: TABLE_GROUP_TYPE + '_' + groupedColumn.name,
type: TABLE_GROUP_TYPE, type: TABLE_GROUP_TYPE,
column: groupedColumn, column: groupedColumn,
width: groupIndentColumnWidth width: indentColumnWidth
}; };
})), toConsumableArray(tableColumnsWithDraftGrouping(tableColumns, draftGrouping, showColumnWhenGrouped))); })), toConsumableArray(tableColumnsWithDraftGrouping(tableColumns, grouping, draftGrouping, showColumnWhenGrouped)));
}; };
var tableRowsWithGrouping = function tableRowsWithGrouping(tableRows, isGroupRow) { var tableRowsWithGrouping = function tableRowsWithGrouping(tableRows, isGroupRow) {
@@ -1379,8 +1412,8 @@ var tableRowsWithHeading = function tableRowsWithHeading(headerRows) {
var TABLE_DETAIL_TYPE = 'detail'; var TABLE_DETAIL_TYPE = 'detail';
var isDetailRowExpanded = function isDetailRowExpanded(expandedRows, rowId) { var isDetailRowExpanded = function isDetailRowExpanded(expandedDetailRowIds, rowId) {
return expandedRows.indexOf(rowId) > -1; return expandedDetailRowIds.indexOf(rowId) > -1;
}; };
var isDetailToggleTableCell = function isDetailToggleTableCell(tableRow, tableColumn) { var isDetailToggleTableCell = function isDetailToggleTableCell(tableRow, tableColumn) {
return tableColumn.type === TABLE_DETAIL_TYPE && tableRow.type === TABLE_DATA_TYPE; return tableColumn.type === TABLE_DETAIL_TYPE && tableRow.type === TABLE_DATA_TYPE;
@@ -1389,26 +1422,26 @@ var isDetailTableRow = function isDetailTableRow(tableRow) {
return tableRow.type === TABLE_DETAIL_TYPE; return tableRow.type === TABLE_DETAIL_TYPE;
}; };
var setDetailRowExpanded = function setDetailRowExpanded(prevExpanded, _ref) { var toggleDetailRowExpanded = function toggleDetailRowExpanded(prevExpanded, _ref) {
var rowId = _ref.rowId, var rowId = _ref.rowId,
isExpanded = _ref.isExpanded; state = _ref.state;
var expandedRows = Array.from(prevExpanded); var expandedDetailRowIds = prevExpanded.slice();
var expandedIndex = expandedRows.indexOf(rowId); var expandedIndex = expandedDetailRowIds.indexOf(rowId);
var isRowExpanded = isExpanded !== undefined ? isExpanded : expandedIndex === -1; var rowState = state !== undefined ? state : expandedIndex === -1;
if (expandedIndex > -1 && !isRowExpanded) { if (expandedIndex > -1 && !rowState) {
expandedRows.splice(expandedIndex, 1); expandedDetailRowIds.splice(expandedIndex, 1);
} else if (expandedIndex === -1 && isRowExpanded) { } else if (expandedIndex === -1 && rowState) {
expandedRows.push(rowId); expandedDetailRowIds.push(rowId);
} }
return expandedRows; return expandedDetailRowIds;
}; };
var tableRowsWithExpandedDetail = function tableRowsWithExpandedDetail(tableRows, expandedRows, rowHeight) { var tableRowsWithExpandedDetail = function tableRowsWithExpandedDetail(tableRows, expandedDetailRowIds, rowHeight) {
var result = tableRows; var result = tableRows;
expandedRows.forEach(function (expandedRowId) { expandedDetailRowIds.forEach(function (expandedRowId) {
var rowIndex = result.findIndex(function (tableRow) { var rowIndex = result.findIndex(function (tableRow) {
return tableRow.type === TABLE_DATA_TYPE && tableRow.rowId === expandedRowId; return tableRow.type === TABLE_DATA_TYPE && tableRow.rowId === expandedRowId;
}); });
@@ -1430,8 +1463,8 @@ var tableRowsWithExpandedDetail = function tableRowsWithExpandedDetail(tableRows
return result; return result;
}; };
var tableColumnsWithDetail = function tableColumnsWithDetail(tableColumns, detailToggleCellWidth) { var tableColumnsWithDetail = function tableColumnsWithDetail(tableColumns, toggleColumnWidth) {
return [{ key: TABLE_DETAIL_TYPE, type: TABLE_DETAIL_TYPE, width: detailToggleCellWidth }].concat(toConsumableArray(tableColumns)); return [{ key: TABLE_DETAIL_TYPE, type: TABLE_DETAIL_TYPE, width: toggleColumnWidth }].concat(toConsumableArray(tableColumns));
}; };
var TABLE_SELECT_TYPE = 'select'; var TABLE_SELECT_TYPE = 'select';
@@ -1460,12 +1493,29 @@ var isDataTableRow = function isDataTableRow(tableRow) {
return tableRow.type === TABLE_DATA_TYPE; return tableRow.type === TABLE_DATA_TYPE;
}; };
var tableColumnsWithDataRows = function tableColumnsWithDataRows(columns) { var getColumnExtension = function getColumnExtension(columnExtensions, columnName) {
if (!columnExtensions) {
return {};
}
var columnExtension = columnExtensions.find(function (extension) {
return extension.columnName === columnName;
});
if (!columnExtension) {
return {};
}
return columnExtension;
};
var tableColumnsWithDataRows = function tableColumnsWithDataRows(columns, columnExtensions) {
return columns.map(function (column) { return columns.map(function (column) {
var name = column.name;
var columnExtension = getColumnExtension(columnExtensions, name);
return { return {
key: TABLE_DATA_TYPE + '_' + column.name, key: TABLE_DATA_TYPE + '_' + name,
type: TABLE_DATA_TYPE, type: TABLE_DATA_TYPE,
width: column.width, width: columnExtension.width,
align: columnExtension.align,
column: column column: column
}; };
}); });
@@ -1483,20 +1533,26 @@ var tableRowsWithDataRows = function tableRowsWithDataRows(rows, getRowId) {
}); });
}; };
var visibleTableColumns = function visibleTableColumns(tableColumns, hiddenColumns) { var visibleTableColumns = function visibleTableColumns(tableColumns, hiddenColumnNames) {
return tableColumns.filter(function (tableColumn) { return tableColumns.filter(function (tableColumn) {
return hiddenColumns.indexOf(tableColumn.column.name) === -1; return tableColumn.type !== TABLE_DATA_TYPE || hiddenColumnNames.indexOf(tableColumn.column.name) === -1;
}); });
}; };
var columnChooserItems = function columnChooserItems(columns, hiddenColumns) { var tableDataColumnsExist = function tableDataColumnsExist(tableColumns) {
return tableColumns.some(function (column) {
return column.type === TABLE_DATA_TYPE;
});
};
var columnChooserItems = function columnChooserItems(columns, hiddenColumnNames) {
return columns.map(function (column) { return columns.map(function (column) {
return { column: column, hidden: hiddenColumns.indexOf(column.name) !== -1 }; return { column: column, hidden: hiddenColumnNames.indexOf(column.name) !== -1 };
}); });
}; };
var toggleColumn = function toggleColumn(hiddenColumns, columnName) { var toggleColumn = function toggleColumn(hiddenColumnNames, columnName) {
return hiddenColumns.indexOf(columnName) === -1 ? [].concat(toConsumableArray(hiddenColumns), [columnName]) : hiddenColumns.filter(function (hiddenColumn) { return hiddenColumnNames.indexOf(columnName) === -1 ? [].concat(toConsumableArray(hiddenColumnNames), [columnName]) : hiddenColumnNames.filter(function (hiddenColumn) {
return hiddenColumn !== columnName; return hiddenColumn !== columnName;
}); });
}; };
@@ -1656,15 +1712,36 @@ var isOnTheSameLine = function isOnTheSameLine(geometry, y) {
return y >= geometry.top && y <= geometry.bottom; return y >= geometry.top && y <= geometry.bottom;
}; };
var getGroupCellTargetIndex = function getGroupCellTargetIndex(geometries, sourceIndex, _ref) { var rectToObject = function rectToObject(_ref) {
var x = _ref.x, var top = _ref.top,
y = _ref.y; right = _ref.right,
bottom = _ref.bottom,
left = _ref.left;
return {
top: top, right: right, bottom: bottom, left: left
};
};
var collapseGapsBetweenItems = function collapseGapsBetweenItems(geometries) {
return geometries.map(function (geometry, index) {
if (index !== geometries.length - 1 && geometry.top === geometries[index + 1].top) {
return _extends({}, geometry, {
right: geometries[index + 1].left
});
}
return geometry;
});
};
var getGroupCellTargetIndex = function getGroupCellTargetIndex(geometries, sourceIndex, _ref2) {
var x = _ref2.x,
y = _ref2.y;
if (geometries.length === 0) return 0; if (geometries.length === 0) return 0;
var targetGeometries = sourceIndex !== -1 ? getTargetColumnGeometries(geometries, sourceIndex) : geometries; var targetGeometries = sourceIndex !== -1 ? getTargetColumnGeometries(geometries, sourceIndex) : geometries.map(rectToObject);
var targetIndex = targetGeometries.findIndex(function (geometry, index) { var targetIndex = collapseGapsBetweenItems(targetGeometries).findIndex(function (geometry, index) {
var inVerticalBounds = isOnTheSameLine(geometry, y); var inVerticalBounds = isOnTheSameLine(geometry, y);
var inHorizontalBounds = x >= geometry.left && x <= geometry.right; var inHorizontalBounds = x >= geometry.left && x <= geometry.right;
var shouldGoFirst = index === 0 && x < geometry.left; var shouldGoFirst = index === 0 && x < geometry.left;
@@ -1696,6 +1773,7 @@ var getMessagesFormatter = function getMessagesFormatter(messages) {
}; };
}; };
exports.getColumnExtension = getColumnExtension;
exports.getTableRowColumnsWithColSpan = getTableRowColumnsWithColSpan; exports.getTableRowColumnsWithColSpan = getTableRowColumnsWithColSpan;
exports.getTableColumnGeometries = getTableColumnGeometries; exports.getTableColumnGeometries = getTableColumnGeometries;
exports.getTableTargetColumnIndex = getTableTargetColumnIndex; exports.getTableTargetColumnIndex = getTableTargetColumnIndex;
@@ -1706,17 +1784,17 @@ exports.getGroupCellTargetIndex = getGroupCellTargetIndex;
exports.getMessagesFormatter = getMessagesFormatter; exports.getMessagesFormatter = getMessagesFormatter;
exports.rowIdGetter = rowIdGetter; exports.rowIdGetter = rowIdGetter;
exports.cellValueGetter = cellValueGetter; exports.cellValueGetter = cellValueGetter;
exports.setColumnSorting = setColumnSorting; exports.changeColumnSorting = changeColumnSorting;
exports.getColumnSortingDirection = getColumnSortingDirection; exports.getColumnSortingDirection = getColumnSortingDirection;
exports.sortedRows = sortedRows; exports.sortedRows = sortedRows;
exports.setColumnFilter = setColumnFilter; exports.changeColumnFilter = changeColumnFilter;
exports.getColumnFilterConfig = getColumnFilterConfig; exports.getColumnFilterConfig = getColumnFilterConfig;
exports.filteredRows = filteredRows; exports.filteredRows = filteredRows;
exports.groupByColumn = groupByColumn; exports.GROUP_KEY_SEPARATOR = GROUP_KEY_SEPARATOR;
exports.changeColumnGrouping = changeColumnGrouping;
exports.toggleExpandedGroups = toggleExpandedGroups; exports.toggleExpandedGroups = toggleExpandedGroups;
exports.draftGroupingChange = draftGroupingChange; exports.draftColumnGrouping = draftColumnGrouping;
exports.cancelGroupingChange = cancelGroupingChange; exports.cancelColumnGroupingDraft = cancelColumnGroupingDraft;
exports.draftGrouping = draftGrouping;
exports.groupRowChecker = groupRowChecker; exports.groupRowChecker = groupRowChecker;
exports.groupRowLevelKeyGetter = groupRowLevelKeyGetter; exports.groupRowLevelKeyGetter = groupRowLevelKeyGetter;
exports.groupedRows = groupedRows; exports.groupedRows = groupedRows;
@@ -1732,9 +1810,11 @@ exports.pageCount = pageCount;
exports.rowCount = rowCount; exports.rowCount = rowCount;
exports.firstRowOnPage = firstRowOnPage; exports.firstRowOnPage = firstRowOnPage;
exports.lastRowOnPage = lastRowOnPage; exports.lastRowOnPage = lastRowOnPage;
exports.setRowsSelection = setRowsSelection; exports.toggleSelection = toggleSelection;
exports.getAvailableToSelect = getAvailableToSelect; exports.rowsWithAvailableToSelect = rowsWithAvailableToSelect;
exports.getAvailableSelection = getAvailableSelection; exports.someSelected = someSelected;
exports.allSelected = allSelected;
exports.unwrapSelectedRows = unwrapSelectedRows;
exports.startEditRows = startEditRows; exports.startEditRows = startEditRows;
exports.stopEditRows = stopEditRows; exports.stopEditRows = stopEditRows;
exports.addRow = addRow; exports.addRow = addRow;
@@ -1746,7 +1826,7 @@ exports.deleteRows = deleteRows;
exports.cancelDeletedRows = cancelDeletedRows; exports.cancelDeletedRows = cancelDeletedRows;
exports.changedRowsByIds = changedRowsByIds; exports.changedRowsByIds = changedRowsByIds;
exports.addedRowsByIds = addedRowsByIds; exports.addedRowsByIds = addedRowsByIds;
exports.computedCreateRowChange = computedCreateRowChange; exports.createRowChangeGetter = createRowChangeGetter;
exports.getRowChange = getRowChange; exports.getRowChange = getRowChange;
exports.TABLE_REORDERING_TYPE = TABLE_REORDERING_TYPE; exports.TABLE_REORDERING_TYPE = TABLE_REORDERING_TYPE;
exports.changeColumnOrder = changeColumnOrder; exports.changeColumnOrder = changeColumnOrder;
@@ -1754,8 +1834,9 @@ exports.orderedColumns = orderedColumns;
exports.tableHeaderRowsWithReordering = tableHeaderRowsWithReordering; exports.tableHeaderRowsWithReordering = tableHeaderRowsWithReordering;
exports.draftOrder = draftOrder; exports.draftOrder = draftOrder;
exports.tableColumnsWithWidths = tableColumnsWithWidths; exports.tableColumnsWithWidths = tableColumnsWithWidths;
exports.changeTableColumnWidths = changeTableColumnWidths; exports.changeTableColumnWidth = changeTableColumnWidth;
exports.changeDraftTableColumnWidths = changeDraftTableColumnWidths; exports.draftTableColumnWidth = draftTableColumnWidth;
exports.cancelTableColumnWidthDraft = cancelTableColumnWidthDraft;
exports.TABLE_EDIT_COMMAND_TYPE = TABLE_EDIT_COMMAND_TYPE; exports.TABLE_EDIT_COMMAND_TYPE = TABLE_EDIT_COMMAND_TYPE;
exports.isHeadingEditCommandsTableCell = isHeadingEditCommandsTableCell; exports.isHeadingEditCommandsTableCell = isHeadingEditCommandsTableCell;
exports.isEditCommandsTableCell = isEditCommandsTableCell; exports.isEditCommandsTableCell = isEditCommandsTableCell;
@@ -1784,7 +1865,7 @@ exports.TABLE_DETAIL_TYPE = TABLE_DETAIL_TYPE;
exports.isDetailRowExpanded = isDetailRowExpanded; exports.isDetailRowExpanded = isDetailRowExpanded;
exports.isDetailToggleTableCell = isDetailToggleTableCell; exports.isDetailToggleTableCell = isDetailToggleTableCell;
exports.isDetailTableRow = isDetailTableRow; exports.isDetailTableRow = isDetailTableRow;
exports.setDetailRowExpanded = setDetailRowExpanded; exports.toggleDetailRowExpanded = toggleDetailRowExpanded;
exports.tableRowsWithExpandedDetail = tableRowsWithExpandedDetail; exports.tableRowsWithExpandedDetail = tableRowsWithExpandedDetail;
exports.tableColumnsWithDetail = tableColumnsWithDetail; exports.tableColumnsWithDetail = tableColumnsWithDetail;
exports.TABLE_SELECT_TYPE = TABLE_SELECT_TYPE; exports.TABLE_SELECT_TYPE = TABLE_SELECT_TYPE;
@@ -1800,6 +1881,7 @@ exports.isDataTableRow = isDataTableRow;
exports.tableColumnsWithDataRows = tableColumnsWithDataRows; exports.tableColumnsWithDataRows = tableColumnsWithDataRows;
exports.tableRowsWithDataRows = tableRowsWithDataRows; exports.tableRowsWithDataRows = tableRowsWithDataRows;
exports.visibleTableColumns = visibleTableColumns; exports.visibleTableColumns = visibleTableColumns;
exports.tableDataColumnsExist = tableDataColumnsExist;
exports.columnChooserItems = columnChooserItems; exports.columnChooserItems = columnChooserItems;
exports.toggleColumn = toggleColumn; exports.toggleColumn = toggleColumn;

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,8 @@
{ {
"_from": "@devexpress/dx-grid-core", "_from": "@devexpress/dx-grid-core",
"_id": "@devexpress/dx-grid-core@1.0.0-beta.1", "_id": "@devexpress/dx-grid-core@1.0.3",
"_inBundle": false, "_inBundle": false,
"_integrity": "sha512-3hKM7JUKKHJGJ8C/B20SDfCbkxr7R6ADhKb/IfkWrepJQ78uPDce9wWxwkjl8EqSd8r1jKMWbg5dgXMU6zQwWw==", "_integrity": "sha512-k+mzGd1Gjqbq92BwZdr+UMQcTFfezk2usEaSRqBO30b6+THYYAIx5kFzCbkcv1H37CtFNju29t52ZTNDJZixVQ==",
"_location": "/@devexpress/dx-grid-core", "_location": "/@devexpress/dx-grid-core",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
@@ -17,12 +17,13 @@
"fetchSpec": "latest" "fetchSpec": "latest"
}, },
"_requiredBy": [ "_requiredBy": [
"#USER" "#USER",
"/@devexpress/dx-react-grid"
], ],
"_resolved": "https://registry.npmjs.org/@devexpress/dx-grid-core/-/dx-grid-core-1.0.0-beta.1.tgz", "_resolved": "https://registry.npmjs.org/@devexpress/dx-grid-core/-/dx-grid-core-1.0.3.tgz",
"_shasum": "48f76255c7192e7727f2c9b97efb2bf70774471d", "_shasum": "e6b2708593c10c6dfab2cbc4c2c3f82b5ab910c2",
"_spec": "@devexpress/dx-grid-core", "_spec": "@devexpress/dx-grid-core",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI",
"author": { "author": {
"name": "Developer Express Inc.", "name": "Developer Express Inc.",
"url": "https://www.devexpress.com/" "url": "https://www.devexpress.com/"
@@ -34,24 +35,23 @@
"deprecated": false, "deprecated": false,
"description": "Core library for the DevExtreme Reactive Grid component", "description": "Core library for the DevExtreme Reactive Grid component",
"devDependencies": { "devDependencies": {
"@devexpress/dx-core": "1.0.0-beta.1", "@devexpress/dx-core": "1.0.3",
"babel-core": "^6.26.0", "babel-core": "^6.26.0",
"babel-jest": "^21.2.0", "babel-jest": "^22.1.0",
"babel-plugin-external-helpers": "^6.22.0", "babel-plugin-external-helpers": "^6.22.0",
"babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-plugin-transform-runtime": "^6.23.0", "babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.24.1",
"core-js": "^2.5.1", "core-js": "^2.5.3",
"eslint": "^4.10.0", "eslint": "^4.16.0",
"eslint-config-airbnb-base": "^12.1.0", "eslint-config-airbnb-base": "^12.1.0",
"eslint-plugin-filenames": "^1.2.0", "eslint-plugin-filenames": "^1.2.0",
"eslint-plugin-import": "^2.8.0", "eslint-plugin-import": "^2.8.0",
"eslint-plugin-jest": "^21.3.0", "eslint-plugin-jest": "^21.7.0",
"jest": "^21.2.1", "jest": "^22.1.4",
"rollup": "0.50.0", "rollup": "0.50.0",
"rollup-plugin-babel": "^3.0.2", "rollup-plugin-babel": "^3.0.3",
"rollup-plugin-license": "^0.5.0", "rollup-plugin-license": "^0.5.0"
"seamless-immutable": "^7.1.2"
}, },
"files": [ "files": [
"dist" "dist"
@@ -68,7 +68,7 @@
"module": "dist/dx-grid-core.es.js", "module": "dist/dx-grid-core.es.js",
"name": "@devexpress/dx-grid-core", "name": "@devexpress/dx-grid-core",
"peerDependencies": { "peerDependencies": {
"@devexpress/dx-core": "1.0.0-beta.1" "@devexpress/dx-core": "1.0.3"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
@@ -86,5 +86,5 @@
"test:coverage": "jest --coverage", "test:coverage": "jest --coverage",
"test:watch": "jest --watch" "test:watch": "jest --watch"
}, },
"version": "1.0.0-beta.1" "version": "1.0.3"
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
/** /**
* Bundle of @devexpress/dx-core * Bundle of @devexpress/dx-core
* Generated: 2017-11-10 * Generated: 2018-03-02
* Version: 1.0.0-beta.1 * Version: 1.0.3
* License: https://js.devexpress.com/Licensing * License: https://js.devexpress.com/Licensing
*/ */
@@ -186,22 +186,22 @@ var PluginHost = function () {
this.plugins.filter(function (plugin) { this.plugins.filter(function (plugin) {
return plugin.container; return plugin.container;
}).forEach(function (plugin) { }).forEach(function (plugin) {
if (knownOptionals.has(plugin.pluginName)) { if (knownOptionals.has(plugin.name)) {
throw getDependencyError(knownOptionals.get(plugin.pluginName), plugin.pluginName); throw getDependencyError(knownOptionals.get(plugin.name), plugin.name);
} }
plugin.dependencies.forEach(function (dependency) { plugin.dependencies.forEach(function (dependency) {
if (defined.has(dependency.pluginName)) return; if (defined.has(dependency.name)) return;
if (dependency.optional) { if (dependency.optional) {
if (!knownOptionals.has(dependency.pluginName)) { if (!knownOptionals.has(dependency.name)) {
knownOptionals.set(dependency.pluginName, plugin.pluginName); knownOptionals.set(dependency.name, plugin.name);
} }
return; return;
} }
throw getDependencyError(plugin.pluginName, dependency.pluginName); throw getDependencyError(plugin.name, dependency.name);
}); });
defined.add(plugin.pluginName); defined.add(plugin.name);
}); });
} }
}, { }, {

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
/** /**
* Bundle of @devexpress/dx-core * Bundle of @devexpress/dx-core
* Generated: 2017-11-10 * Generated: 2018-03-02
* Version: 1.0.0-beta.1 * Version: 1.0.3
* License: https://js.devexpress.com/Licensing * License: https://js.devexpress.com/Licensing
*/ */
@@ -192,22 +192,22 @@ var PluginHost = function () {
this.plugins.filter(function (plugin) { this.plugins.filter(function (plugin) {
return plugin.container; return plugin.container;
}).forEach(function (plugin) { }).forEach(function (plugin) {
if (knownOptionals.has(plugin.pluginName)) { if (knownOptionals.has(plugin.name)) {
throw getDependencyError(knownOptionals.get(plugin.pluginName), plugin.pluginName); throw getDependencyError(knownOptionals.get(plugin.name), plugin.name);
} }
plugin.dependencies.forEach(function (dependency) { plugin.dependencies.forEach(function (dependency) {
if (defined.has(dependency.pluginName)) return; if (defined.has(dependency.name)) return;
if (dependency.optional) { if (dependency.optional) {
if (!knownOptionals.has(dependency.pluginName)) { if (!knownOptionals.has(dependency.name)) {
knownOptionals.set(dependency.pluginName, plugin.pluginName); knownOptionals.set(dependency.name, plugin.name);
} }
return; return;
} }
throw getDependencyError(plugin.pluginName, dependency.pluginName); throw getDependencyError(plugin.name, dependency.name);
}); });
defined.add(plugin.pluginName); defined.add(plugin.name);
}); });
} }
}, { }, {

File diff suppressed because one or more lines are too long

View File

@@ -1,28 +1,28 @@
{ {
"_from": "@devexpress/dx-core@1.0.0-beta.1", "_from": "@devexpress/dx-core@1.0.3",
"_id": "@devexpress/dx-core@1.0.0-beta.1", "_id": "@devexpress/dx-core@1.0.3",
"_inBundle": false, "_inBundle": false,
"_integrity": "sha512-4Kv5RTlmlK7o2DF5BB5r2yWgshvFrUSHWzJzdSyBtFxsQzvI3vJqS0Z0mAplZCyYfRk4xh9SRp6I9DML66v0EQ==", "_integrity": "sha512-M1Kjju074ddAQmaFuKypM/LdhCZsDISqhGj4LST2ZGQPlGpH89BMBEV8p+8MedFQQCG/svuS25AKip1Gs9KJgA==",
"_location": "/@devexpress/dx-react-core/@devexpress/dx-core", "_location": "/@devexpress/dx-react-core/@devexpress/dx-core",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
"type": "version", "type": "version",
"registry": true, "registry": true,
"raw": "@devexpress/dx-core@1.0.0-beta.1", "raw": "@devexpress/dx-core@1.0.3",
"name": "@devexpress/dx-core", "name": "@devexpress/dx-core",
"escapedName": "@devexpress%2fdx-core", "escapedName": "@devexpress%2fdx-core",
"scope": "@devexpress", "scope": "@devexpress",
"rawSpec": "1.0.0-beta.1", "rawSpec": "1.0.3",
"saveSpec": null, "saveSpec": null,
"fetchSpec": "1.0.0-beta.1" "fetchSpec": "1.0.3"
}, },
"_requiredBy": [ "_requiredBy": [
"/@devexpress/dx-react-core" "/@devexpress/dx-react-core"
], ],
"_resolved": "https://registry.npmjs.org/@devexpress/dx-core/-/dx-core-1.0.0-beta.1.tgz", "_resolved": "https://registry.npmjs.org/@devexpress/dx-core/-/dx-core-1.0.3.tgz",
"_shasum": "63383ec2bd3903d9a163c1316706cde32227d6b4", "_shasum": "c310b540229f83d6be5797fb2a5da5491757d21b",
"_spec": "@devexpress/dx-core@1.0.0-beta.1", "_spec": "@devexpress/dx-core@1.0.3",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core",
"author": { "author": {
"name": "Developer Express Inc.", "name": "Developer Express Inc.",
"url": "https://www.devexpress.com/" "url": "https://www.devexpress.com/"
@@ -35,20 +35,20 @@
"description": "Core library for DevExtreme Reactive Components", "description": "Core library for DevExtreme Reactive Components",
"devDependencies": { "devDependencies": {
"babel-core": "^6.26.0", "babel-core": "^6.26.0",
"babel-jest": "^21.2.0", "babel-jest": "^22.1.0",
"babel-plugin-external-helpers": "^6.22.0", "babel-plugin-external-helpers": "^6.22.0",
"babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-plugin-transform-runtime": "^6.23.0", "babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.24.1",
"core-js": "^2.5.1", "core-js": "^2.5.3",
"eslint": "^4.10.0", "eslint": "^4.16.0",
"eslint-config-airbnb-base": "^12.1.0", "eslint-config-airbnb-base": "^12.1.0",
"eslint-plugin-filenames": "^1.2.0", "eslint-plugin-filenames": "^1.2.0",
"eslint-plugin-import": "^2.8.0", "eslint-plugin-import": "^2.8.0",
"eslint-plugin-jest": "^21.3.0", "eslint-plugin-jest": "^21.7.0",
"jest": "^21.2.1", "jest": "^22.1.4",
"rollup": "0.50.0", "rollup": "0.50.0",
"rollup-plugin-babel": "^3.0.2", "rollup-plugin-babel": "^3.0.3",
"rollup-plugin-license": "^0.5.0" "rollup-plugin-license": "^0.5.0"
}, },
"files": [ "files": [
@@ -81,5 +81,5 @@
"test:coverage": "jest --coverage", "test:coverage": "jest --coverage",
"test:watch": "jest --watch" "test:watch": "jest --watch"
}, },
"version": "1.0.0-beta.1" "version": "1.0.3"
} }

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "_resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"_shasum": "e50347611d7e690943208bbdafebcbc2fb866d46", "_shasum": "e50347611d7e690943208bbdafebcbc2fb866d46",
"_spec": "asap@~2.0.3", "_spec": "asap@~2.0.3",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\promise", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\promise",
"browser": { "browser": {
"./asap": "./browser-asap.js", "./asap": "./browser-asap.js",
"./asap.js": "./browser-asap.js", "./asap.js": "./browser-asap.js",

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", "_resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
"_shasum": "652294c14651db28fa93bd2d5ff2983a4f08c636", "_shasum": "652294c14651db28fa93bd2d5ff2983a4f08c636",
"_spec": "core-js@^1.0.0", "_spec": "core-js@^1.0.0",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs",
"bugs": { "bugs": {
"url": "https://github.com/zloirock/core-js/issues" "url": "https://github.com/zloirock/core-js/issues"
}, },

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "_resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"_shasum": "538b66f3ee62cd1ab51ec323829d1f9480c74beb", "_shasum": "538b66f3ee62cd1ab51ec323829d1f9480c74beb",
"_spec": "encoding@^0.1.11", "_spec": "encoding@^0.1.11",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\node-fetch", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\node-fetch",
"author": { "author": {
"name": "Andris Reinman" "name": "Andris Reinman"
}, },

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", "_resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
"_shasum": "5e67432f550dc41b572bf55847b8aca64e5337db", "_shasum": "5e67432f550dc41b572bf55847b8aca64e5337db",
"_spec": "fbjs@^0.8.16", "_spec": "fbjs@^0.8.16",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\prop-types", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\prop-types",
"browserify": { "browserify": {
"transform": [ "transform": [
"loose-envify" "loose-envify"

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "_resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
"_shasum": "f7468f60135f5e5dad3399c0a81be9a1603a082b", "_shasum": "f7468f60135f5e5dad3399c0a81be9a1603a082b",
"_spec": "iconv-lite@~0.4.13", "_spec": "iconv-lite@~0.4.13",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\encoding", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\encoding",
"author": { "author": {
"name": "Alexander Shtuchkin", "name": "Alexander Shtuchkin",
"email": "ashtuchkin@gmail.com" "email": "ashtuchkin@gmail.com"

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "_resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"_shasum": "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44", "_shasum": "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44",
"_spec": "is-stream@^1.0.1", "_spec": "is-stream@^1.0.1",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\node-fetch", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\node-fetch",
"author": { "author": {
"name": "Sindre Sorhus", "name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com", "email": "sindresorhus@gmail.com",

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "_resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
"_shasum": "611ae1acf14f5e81f729507472819fe9733558a9", "_shasum": "611ae1acf14f5e81f729507472819fe9733558a9",
"_spec": "isomorphic-fetch@^2.1.1", "_spec": "isomorphic-fetch@^2.1.1",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs",
"author": { "author": {
"name": "Matt Andrews", "name": "Matt Andrews",
"email": "matt@mattandre.ws" "email": "matt@mattandre.ws"

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "_resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
"_shasum": "9866df395102130e38f7f996bceb65443209c25b", "_shasum": "9866df395102130e38f7f996bceb65443209c25b",
"_spec": "js-tokens@^3.0.0", "_spec": "js-tokens@^3.0.0",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\loose-envify", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\loose-envify",
"author": { "author": {
"name": "Simon Lydell" "name": "Simon Lydell"
}, },

View File

@@ -22,7 +22,7 @@
"_resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "_resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
"_shasum": "d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848", "_shasum": "d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848",
"_spec": "loose-envify@^1.3.1", "_spec": "loose-envify@^1.3.1",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\prop-types", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\prop-types",
"author": { "author": {
"name": "Andres Suarez", "name": "Andres Suarez",
"email": "zertosh@gmail.com" "email": "zertosh@gmail.com"

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "_resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"_shasum": "980f6f72d85211a5347c6b2bc18c5b84c3eb47ef", "_shasum": "980f6f72d85211a5347c6b2bc18c5b84c3eb47ef",
"_spec": "node-fetch@^1.0.1", "_spec": "node-fetch@^1.0.1",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\isomorphic-fetch", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\isomorphic-fetch",
"author": { "author": {
"name": "David Frank" "name": "David Frank"
}, },

View File

@@ -22,7 +22,7 @@
"_resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "_resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"_shasum": "2109adc7965887cfc05cbbd442cac8bfbb360863", "_shasum": "2109adc7965887cfc05cbbd442cac8bfbb360863",
"_spec": "object-assign@^4.1.1", "_spec": "object-assign@^4.1.1",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\prop-types", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\prop-types",
"author": { "author": {
"name": "Sindre Sorhus", "name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com", "email": "sindresorhus@gmail.com",

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "_resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"_shasum": "064b72602b18f90f29192b8b1bc418ffd1ebd3bf", "_shasum": "064b72602b18f90f29192b8b1bc418ffd1ebd3bf",
"_spec": "promise@^7.1.1", "_spec": "promise@^7.1.1",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs",
"author": { "author": {
"name": "ForbesLindesay" "name": "ForbesLindesay"
}, },

View File

@@ -20,16 +20,32 @@ import PropTypes from 'prop-types'; // ES6
var PropTypes = require('prop-types'); // ES5 with npm var PropTypes = require('prop-types'); // ES5 with npm
``` ```
If you prefer a `<script>` tag, you can get it from `window.PropTypes` global: ### CDN
If you prefer to exclude `prop-types` from your application and use it
globally via `window.PropTypes`, the `prop-types` package provides
single-file distributions, which are hosted on the following CDNs:
* [**unpkg**](https://unpkg.com/prop-types/)
```html ```html
<!-- development version --> <!-- development version -->
<script src="https://unpkg.com/prop-types/prop-types.js"></script> <script src="https://unpkg.com/prop-types@15.6/prop-types.js"></script>
<!-- production version --> <!-- production version -->
<script src="https://unpkg.com/prop-types/prop-types.min.js"></script> <script src="https://unpkg.com/prop-types@15.6/prop-types.min.js"></script>
``` ```
* [**cdnjs**](https://cdnjs.com/libraries/prop-types)
```html
<!-- development version -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.0/prop-types.js"></script>
<!-- production version -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.0/prop-types.min.js"></script>
```
To load a specific version of `prop-types` replace `15.6.0` with the version number.
## Usage ## Usage
PropTypes was originally exposed as part of the React core module, and is PropTypes was originally exposed as part of the React core module, and is
@@ -232,7 +248,7 @@ See below for more info.
**You might also see this error** if youre calling a `PropTypes` validator from your own custom `PropTypes` validator. In this case, the fix is to make sure that you are passing *all* of the arguments to the inner function. There is a more in-depth explanation of how to fix it [on this page](https://facebook.github.io/react/warnings/dont-call-proptypes.html#fixing-the-false-positive-in-third-party-proptypes). Alternatively, you can temporarily keep using `React.PropTypes` until React 16, as it would still only warn in this case. **You might also see this error** if youre calling a `PropTypes` validator from your own custom `PropTypes` validator. In this case, the fix is to make sure that you are passing *all* of the arguments to the inner function. There is a more in-depth explanation of how to fix it [on this page](https://facebook.github.io/react/warnings/dont-call-proptypes.html#fixing-the-false-positive-in-third-party-proptypes). Alternatively, you can temporarily keep using `React.PropTypes` until React 16, as it would still only warn in this case.
If you use a bundler like Browserify or Webpack, dont forget to [follow these instructions](https://facebook.github.io/react/docs/installation.html#development-and-production-versions) to correctly bundle your application in development or production mode. Otherwise youll ship unnecessary code to your users. If you use a bundler like Browserify or Webpack, dont forget to [follow these instructions](https://reactjs.org/docs/optimizing-performance.html#use-the-production-build) to correctly bundle your application in development or production mode. Otherwise youll ship unnecessary code to your users.
## PropTypes.checkPropTypes ## PropTypes.checkPropTypes

View File

@@ -1,8 +1,8 @@
{ {
"_from": "prop-types@^15.6.0", "_from": "prop-types@^15.6.0",
"_id": "prop-types@15.6.0", "_id": "prop-types@15.6.1",
"_inBundle": false, "_inBundle": false,
"_integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", "_integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==",
"_location": "/@devexpress/dx-react-core/prop-types", "_location": "/@devexpress/dx-react-core/prop-types",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
@@ -18,17 +18,17 @@
"_requiredBy": [ "_requiredBy": [
"/@devexpress/dx-react-core" "/@devexpress/dx-react-core"
], ],
"_resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", "_resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz",
"_shasum": "ceaf083022fc46b4a35f69e13ef75aed0d639856", "_shasum": "36644453564255ddda391191fb3a125cbdf654ca",
"_spec": "prop-types@^15.6.0", "_spec": "prop-types@^15.6.0",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core",
"browserify": { "browserify": {
"transform": [ "transform": [
"loose-envify" "loose-envify"
] ]
}, },
"bugs": { "bugs": {
"url": "https://github.com/reactjs/prop-types/issues" "url": "https://github.com/facebook/prop-types/issues"
}, },
"bundleDependencies": false, "bundleDependencies": false,
"dependencies": { "dependencies": {
@@ -70,7 +70,7 @@
"name": "prop-types", "name": "prop-types",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/reactjs/prop-types.git" "url": "git+https://github.com/facebook/prop-types.git"
}, },
"scripts": { "scripts": {
"build": "yarn umd && yarn umd-min", "build": "yarn umd && yarn umd-min",
@@ -79,5 +79,5 @@
"umd": "NODE_ENV=development browserify index.js -t envify --standalone PropTypes -o prop-types.js", "umd": "NODE_ENV=development browserify index.js -t envify --standalone PropTypes -o prop-types.js",
"umd-min": "NODE_ENV=production browserify index.js -t envify -t uglifyify --standalone PropTypes -p bundle-collapser/plugin -o | uglifyjs --compress unused,dead_code -o prop-types.min.js" "umd-min": "NODE_ENV=production browserify index.js -t envify -t uglifyify --standalone PropTypes -p bundle-collapser/plugin -o | uglifyjs --compress unused,dead_code -o prop-types.min.js"
}, },
"version": "15.6.0" "version": "15.6.1"
} }

View File

@@ -712,11 +712,9 @@ module.exports = ReactPropTypesSecret;
/** /**
* Copyright (c) 2013-present, Facebook, Inc. * Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
* *
* This source code is licensed under the BSD-style license found in the * This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree. An additional grant * LICENSE file in the root directory of this source tree.
* of patent rights can be found in the PATENTS file in the same directory.
* *
* *
*/ */
@@ -749,11 +747,9 @@ module.exports = emptyFunction;
},{}],7:[function(require,module,exports){ },{}],7:[function(require,module,exports){
/** /**
* Copyright (c) 2013-present, Facebook, Inc. * Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
* *
* This source code is licensed under the BSD-style license found in the * This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree. An additional grant * LICENSE file in the root directory of this source tree.
* of patent rights can be found in the PATENTS file in the same directory.
* *
*/ */
@@ -804,12 +800,10 @@ function invariant(condition, format, a, b, c, d, e, f) {
module.exports = invariant; module.exports = invariant;
},{}],8:[function(require,module,exports){ },{}],8:[function(require,module,exports){
/** /**
* Copyright 2014-2015, Facebook, Inc. * Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
* *
* This source code is licensed under the BSD-style license found in the * This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree. An additional grant * LICENSE file in the root directory of this source tree.
* of patent rights can be found in the PATENTS file in the same directory.
* *
*/ */
@@ -827,7 +821,6 @@ var emptyFunction = require('./emptyFunction');
var warning = emptyFunction; var warning = emptyFunction;
if ("development" !== 'production') { if ("development" !== 'production') {
(function () {
var printWarning = function printWarning(format) { var printWarning = function printWarning(format) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key]; args[_key - 1] = arguments[_key];
@@ -865,7 +858,6 @@ if ("development" !== 'production') {
printWarning.apply(undefined, [format].concat(args)); printWarning.apply(undefined, [format].concat(args));
} }
}; };
})();
} }
module.exports = warning; module.exports = warning;

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "_resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"_shasum": "290cbb232e306942d7d7ea9b83732ab7856f8285", "_shasum": "290cbb232e306942d7d7ea9b83732ab7856f8285",
"_spec": "setimmediate@^1.0.5", "_spec": "setimmediate@^1.0.5",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs",
"author": { "author": {
"name": "YuzuJS" "name": "YuzuJS"
}, },

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", "_resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
"_shasum": "e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac", "_shasum": "e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac",
"_spec": "ua-parser-js@^0.7.9", "_spec": "ua-parser-js@^0.7.9",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\fbjs",
"author": { "author": {
"name": "Faisal Salman", "name": "Faisal Salman",
"email": "f@faisalman.com", "email": "f@faisalman.com",

View File

@@ -21,7 +21,7 @@
"_resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", "_resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz",
"_shasum": "9c84ec2dcf68187ff00bc64e1274b442176e1c84", "_shasum": "9c84ec2dcf68187ff00bc64e1274b442176e1c84",
"_spec": "whatwg-fetch@>=0.10.0", "_spec": "whatwg-fetch@>=0.10.0",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project\\node_modules\\@devexpress\\dx-react-core\\node_modules\\isomorphic-fetch", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI\\node_modules\\@devexpress\\dx-react-core\\node_modules\\isomorphic-fetch",
"bugs": { "bugs": {
"url": "https://github.com/github/fetch/issues" "url": "https://github.com/github/fetch/issues"
}, },

View File

@@ -1,8 +1,8 @@
{ {
"_from": "@devexpress/dx-react-core", "_from": "@devexpress/dx-react-core",
"_id": "@devexpress/dx-react-core@1.0.0-beta.1", "_id": "@devexpress/dx-react-core@1.0.3",
"_inBundle": false, "_inBundle": false,
"_integrity": "sha512-GIJ3ztuR7ldJtxX7RbMqjFXYrMvPLpQn39Zepa6RMv8lWBwDW58dTGPVYsnL2iABu8YALyEPIg/UW3aakz6tEA==", "_integrity": "sha512-3cHeltRoFIwP/4Bu1cF3r+jSfRgYWwSFPJ+qy0U5sYSm4GhC1Ij/1dBM7GDYKI8OowSGIEoWYni4Ktmb1C4iTA==",
"_location": "/@devexpress/dx-react-core", "_location": "/@devexpress/dx-react-core",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
@@ -19,10 +19,10 @@
"_requiredBy": [ "_requiredBy": [
"#USER" "#USER"
], ],
"_resolved": "https://registry.npmjs.org/@devexpress/dx-react-core/-/dx-react-core-1.0.0-beta.1.tgz", "_resolved": "https://registry.npmjs.org/@devexpress/dx-react-core/-/dx-react-core-1.0.3.tgz",
"_shasum": "7f44d4162d429aa55fca9c18407561841dac92a4", "_shasum": "362194fe6a86dd2addf493894df9dbf17a466ee5",
"_spec": "@devexpress/dx-react-core", "_spec": "@devexpress/dx-react-core",
"_where": "C:\\Users\\deranjer\\GoglandProjects\\torrent-project\\torrent-project", "_where": "C:\\Users\\deranjer\\go\\src\\github.com\\deranjer\\goTorrent\\goTorrentWebUI",
"author": { "author": {
"name": "Developer Express Inc.", "name": "Developer Express Inc.",
"url": "https://www.devexpress.com/" "url": "https://www.devexpress.com/"
@@ -32,43 +32,49 @@
}, },
"bundleDependencies": false, "bundleDependencies": false,
"dependencies": { "dependencies": {
"@devexpress/dx-core": "1.0.0-beta.1", "@devexpress/dx-core": "1.0.3",
"prop-types": "^15.6.0" "prop-types": "^15.6.0"
}, },
"deprecated": false, "deprecated": false,
"description": "Core library for DevExtreme React Components", "description": "Core library for DevExtreme React Components",
"devDependencies": { "devDependencies": {
"@devexpress/dx-testing": "1.0.0-beta.1", "@devexpress/dx-testing": "1.0.3",
"babel-core": "^6.26.0", "babel-core": "^6.26.0",
"babel-jest": "^21.2.0", "babel-jest": "^22.1.0",
"babel-plugin-external-helpers": "^6.22.0", "babel-plugin-external-helpers": "^6.22.0",
"babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-plugin-transform-runtime": "^6.23.0", "babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1", "babel-preset-react": "^6.24.1",
"core-js": "^2.5.1", "core-js": "^2.5.3",
"enzyme": "^2.9.1", "enzyme": "^3.3.0",
"eslint": "^4.10.0", "enzyme-adapter-react-16": "^1.1.1",
"eslint": "^4.16.0",
"eslint-config-airbnb": "^16.1.0", "eslint-config-airbnb": "^16.1.0",
"eslint-plugin-filenames": "^1.2.0", "eslint-plugin-filenames": "^1.2.0",
"eslint-plugin-import": "^2.8.0", "eslint-plugin-import": "^2.8.0",
"eslint-plugin-jest": "^21.3.0", "eslint-plugin-jest": "^21.7.0",
"eslint-plugin-jsx-a11y": "^6.0.2", "eslint-plugin-jsx-a11y": "^6.0.3",
"eslint-plugin-react": "^7.4.0", "eslint-plugin-react": "^7.6.1",
"jest": "^21.2.1", "jest": "^22.1.4",
"react": "^15.6.1", "react": "^16.2.0",
"react-dom": "^15.6.1", "react-dom": "^16.2.0",
"react-test-renderer": "^15.6.1", "react-test-renderer": "^16.2.0",
"rollup": "0.50.0", "rollup": "0.50.0",
"rollup-plugin-babel": "^3.0.2", "rollup-plugin-babel": "^3.0.3",
"rollup-plugin-license": "^0.5.0", "rollup-plugin-license": "^0.5.0",
"rollup-plugin-node-resolve": "^3.0.0" "rollup-plugin-node-resolve": "^3.0.2"
}, },
"files": [ "files": [
"dist" "dist"
], ],
"globalName": "DevExpress.DXReactCore", "globalName": "DevExpress.DXReactCore",
"homepage": "https://devexpress.github.io/devextreme-reactive/", "homepage": "https://devexpress.github.io/devextreme-reactive/",
"jest": {
"setupFiles": [
"<rootDir>/setup-enzyme.js"
]
},
"keywords": [ "keywords": [
"react", "react",
"component", "component",
@@ -79,8 +85,8 @@
"module": "dist/dx-react-core.es.js", "module": "dist/dx-react-core.es.js",
"name": "@devexpress/dx-react-core", "name": "@devexpress/dx-react-core",
"peerDependencies": { "peerDependencies": {
"react": "^15.6.1 || ^16.0.0", "react": "^16.2.0",
"react-dom": "^15.6.1 || ^16.0.0" "react-dom": "^16.2.0"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
@@ -98,5 +104,5 @@
"test:coverage": "jest --coverage", "test:coverage": "jest --coverage",
"test:watch": "jest --watch" "test:watch": "jest --watch"
}, },
"version": "1.0.0-beta.1" "version": "1.0.3"
} }

View File

@@ -12,9 +12,9 @@ npm i --save @devexpress/dx-react-core @devexpress/dx-react-grid @devexpress/dx-
Add the required modules to your project: Add the required modules to your project:
```js ```jsx
import { import {
Grid, TableView, TableHeaderRow Grid, Table, TableHeaderRow
} from '@devexpress/dx-react-grid-material-ui'; } from '@devexpress/dx-react-grid-material-ui';
const App = () => ( const App = () => (
@@ -28,7 +28,7 @@ const App = () => (
{ name: 'product', title: 'Product' }, { name: 'product', title: 'Product' },
{ name: 'owner', title: 'Owner' }, { name: 'owner', title: 'Owner' },
]}> ]}>
<TableView /> <Table />
<TableHeaderRow /> <TableHeaderRow />
</Grid> </Grid>
); );
@@ -44,28 +44,31 @@ See [demos](https://devexpress.github.io/devextreme-reactive/react/grid/demos/)
## Reference ## Reference
The package exposes components and plugins with injected templates. The package exposes components and plugins with injected template components.
Components: Components:
- [Grid](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/grid/) - [Grid](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/grid/)
- [ColumnChooser](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/column-chooser/)
Plugins: Plugins:
- [TableView](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-view/) - [DragDropProvider](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/drag-drop-provider/)
- [TableHeaderRow](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-header-row/)
- [TableSelection](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-selection/)
- [TableFilterRow](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-filter-row/)
- [TableRowDetail](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-row-detail/)
- [TableGroupRow](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-group-row/)
- [TableColumnVisibility](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-column-visibility/)
- [TableColumnReordering](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-column-reordering/)
- [GroupingPanel](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/grouping-panel/) - [GroupingPanel](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/grouping-panel/)
- [ColumnChooser](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/column-chooser/)
- [PagingPanel](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/paging-panel/) - [PagingPanel](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/paging-panel/)
- [DragDropContext](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/drag-drop-context/) - [Table](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table/)
- [TableColumnResizing](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-column-resizing/)
The templates are defined via properties that end with the 'Template' postfix which accept a rendering function. Assign a custom function to the required property to override the default rendering function. The custom function should return `undefined` if you need to invoke the default behavior under certain conditions. - [TableColumnReordering](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-column-reordering/)
- [TableColumnVisibility](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-column-visibility/)
- [TableEditColumn](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-edit-column/)
- [TableEditRow](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-edit-row/)
- [TableFilterRow](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-filter-row/)
- [TableGroupRow](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-group-row/)
- [TableHeaderRow](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-header-row/)
- [TableRowDetail](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-row-detail/)
- [TableSelection](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/table-selection/)
- [Toolbar](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/toolbar/)
- [VirtualTable](https://devexpress.github.io/devextreme-reactive/react/grid/docs/reference/virtual-table/)
## License ## License

Some files were not shown because too many files have changed in this diff Show More